逆向查詢中IF函數和數組的用法,你理解嗎?這有原理了解一下!

2020-12-16 小哥聊經驗

花葉草木深,工作要加薪。最近收到資深粉絲髮來的私信:廖老師,我對於VLOOKUP的逆向查詢中使用IF和數組用法不太理解,您能詳解一下嗎?

當然,所以今天就抽時間來扒一下,隱藏在IF函數和數組用法裡的是什麼樣的原理呢?不過在回答問題之前,我還是先來重溫一下IF函數的基本用法。

01IF函數基本用法

IF函數是Excel比較常用函數之一,有函數中的萬金油之稱。在很多書中,介紹IF函數時,都喜歡用劃分等級的例子來解釋函數的用法,並告訴我們如何嵌套來解決問題,當然微軟也很給力,在Excel 2007版將嵌套的層數增加到67層,這樣我們是不是就能在工作很愉快跟IF函數玩耍了呢?然而現實很骨感,反而在很多大公司的編程規範中,明確規定不得使用IF函數嵌套層數超過3層,而且等級劃分儘量不要使用IF來完成。那麼問題來了,IF函數到底犯了什麼錯,竟會被公司雪藏呢?

因為用IF函數嵌套分級的規律:劃分N個層級需要N-1個if嵌套,若劃分層級太多,就會導致IF函數嵌套邏輯結構複雜,代碼冗長,一旦出現問題,查找原因非常困難,這也是為什麼大公司雪藏它在分級上應用的原因。

不過這些不是本文的重點,再聊重點之前,還是先來了解一下IF的基礎用法吧!

語法結構IF(條件表達式,為真的結果,為假的結果)

條件表達式:通常為單元格引用+比較運算符+值或函數,不過存在最簡形式,只保留值,這時值除了有2種類型,邏輯值和數字:TURE/非0(真)和FALSE/0(假),還有一種常為0或1的數組形式;為真的結果:條件表達式成立時,顯示的值或方式,可為公式,函數,引用範圍外,還可以是數值,字符串,字符串需要用雙引號包裹;為假的結果:條件表達式不成立時顯示的值或處理方式,值和處理方式同上;:若不論條件表達式為真或假,不想做任何處理,可以留空,若函數返回參數留空,則函數最終運行結果為0;

IF函數的使用邏輯並不難理解,它其實就是一個最多有2個選項的單選題,比如C2,錄入公式IF(B2>=60,「及格」,」不及格」),同行B列單元格的值大於等於60,及格,否則不及格。了解了IF函數的基本用法,是不是賊簡單,接下來就一起看看數組知識點。

02數組

如果你想精通Excel函數的用法,數組就是你必須要跨過的坎,只有熟悉了數組的一些原理,才能在解決問題的時候,做到遊刃有餘。

當然數組部分包含的知識點也不少,有數組的運算,一維和二維如何互相轉化,函數的數組模式,以及數組分為幾種類型,這些我會在後面的文中重點介紹,而今天我們只用到兩個概念:一維數組和二維數組。

一維數組:在Excel中也是有方向之分:橫向一維和縱向一維;橫向以,逗號為間隔,縱向以分號為間隔,其中每個元素可以為文本,數字,日期,TRUE/FALSE,為文本時,需用雙引號包裹;

一維數組橫向和縱向示意圖(圖1)

二維數組:是指同時包含橫向和縱向,在書寫時,橫向和縱向的原素是有順序的:先縱後橫,體現在符號上,先逗號後分號;其中的元素的數據類型同上,結構如下圖:

二維數組元素結構示意圖(圖2)

雖然概念上很陌生,實際我們所使用的工作表,就是一個固定長度和高度的二維數組,若整個單列或截取一部分就是縱向一維引用數組,比如:A1:A8,同理橫向數組為單行或單行的一部分:C1:H1表格的二維數組則同時包含引用範圍的行和列:C2:D8

工作表數組引用示意圖(圖3)

03分析IF函數和數組用法原理

我在IF函數中使用數組作為條件表達式,並不是老師教的,也不是在書中看的,只是一時的突發奇想:如果用數組作為IF函數的條件,哪麼函數運行的結果是數組嗎?

於是我就在空白的單元錄入了公式=IF({1,0},TRUE,FALSE),返回結果為TRUE,這不和平常的用法沒區別嗎?不對,是不是我測試的方式不對,趕緊用調試工具【公式求值】來檢查一下公式的運行過程:

選中錄入公式的單元格,點擊【公式】下的【公式求值】按鈕,彈出公式求值窗口,點擊求值;

公式調試操作步驟示意圖(圖4)

結果還是TURE,接著我就在旁邊的單元格錄入={1,0},回車結果為1,原來系統會自動讀取數組的第一個值作為最終結果,那麼問題來了,怎麼樣才能讀取公式的其它結果呢?

當然,首選就是能讀取數組的函數INDEX,若能讀出第2個值,也能證明返回的結果就是數組;按照慣例用INDEX函數之前需先簡介一下用法,而在這隻涉及它的一維數組用法:

語法結構:=INDEX(一維數組,位置);功能:讀取數組中對應位置的元素;測試中,條件數組只包含2個元素,所以測試的公式修改為=INDEX(IF({1,0},TRUE,FALSE),2),回車後,返回的結果為FALSE,結果證明返回的確實是數組,雖然到這基本可以推測出數組為:{TRUE,FALSE},不過還是通過【公式求值】按鈕,來驗證一下,具體公式的運行過程如下:

公式運行過程步驟示意圖(圖5)

上圖在第1次點擊求值時,可以看到IF函數的執行結果為{TRUE,FALSE},通過跟條件表達式的{1,0}對比就能知道,原來可以用數字1/0順序,來控制真假結果在數組的順序;如果再將公式中的TRUE/FALSE都換成數組,那結果又會是怎麼呢?

不過由於數組有三種類型,而IF函數的參數為3個,若想說明所有的情況,恐怕再有一兩篇文章也寫不完,所以這裡我就只介紹關於逆向查詢有關的2種情況,並將其概括為2個原型:

IF({1,0},一維縱向數組1,一維縱向數組2)IF({1;0},一維橫向數組1,一維橫向數組2)上面原型的運行結果,都會返回一個新的二維數組,數組1和數組2的順序,也可以通過1,0的順序來控制,先來個簡單的例子,近距離了解一下生成的規律:

公式1:IF({0,1},{2;3;5;6},{7;8;9;10}) 生成一個二維數組:{7,2;8,3;9,5;10,6},類似數組合併,結果改變了兩列元素的順序;

公式2:IF({0;1},{2,3,5,6},{7,8,9,10})生成的新二維數組:{7,8,9,10;2,3,5,6},類似數組拼接,結果改變了兩行元素的順序;

公式1,2運行過程示意圖(圖6)

如果將上面公式中的結果數組用單元格引用代替,不就能實現單元格引用範圍的重排了嗎?不過在使用的時候,有1點值得注意:

結果的引用範圍必須行數或列數相同且位置對應,否則行數或列數少的會返回部分#N/A或者結果錯誤;使用逆向查詢的函數並非只有VLOOKUP,還有HLOOKUP,下面就來看看逆向查詢是如何實現的。

04逆向查詢的實現

在LOOKUP系查詢家族中,VLOOKUP和HLOOKUP函數要求比較苛刻:

VLOOKUP使用時查找的值必需在引用範圍的第一列HLOOKUP則是查找的值必須在引用範圍的第一行由於大部分的表格,數據存儲都是以行為一條數據的結構,所以HLOOKUP按列查詢在使用率上就沒有VLOOKUP高。我就VLOOKUP為例,簡單的示範一下,逆向查詢的實現:

現有一張工資表,數據結構如下:

案例數據結構示意圖(圖7)

求根據姓名查詢出工號?

分析:根據VLOOKUP函數要求,姓名必須出現查詢範圍的第一列,上圖可知,工號在A列,姓名在B列,所以要VLOOKUP來查詢,就必須用到上面的公式1,來調整列的順序。不過調整順序的寫法並非只有一種,因為A列,B列的結果的順序有2種組合,條件數組中的1,0的順序也有2種可能,所以可以組合出四種寫法,而我選擇條件數組的種的1對應A列引用,0對應B列引用,其中一種的寫法:IF({0,1},A:A,B:B);在帶入VLOOKUP函數之前,先回顧一下函數用法:

VLOOKUP(查找值,查找引用範圍,返回結果所在列數,查找模式編碼)

之後把編寫的IF公式代替查找引用範圍返回結果所在列數2查找模式編碼0(精準查找),公式的原料已經備齊,剩下就是步驟了。

操作步驟:

F1:G1錄入「查詢姓名」和「工號」,F2為錄入姓名單元格,G3的公式為=VLOOKUP(F2,IF({0,1},A:A,B:B),2,0)回車;

05總結

雖然IF函數和數組的用法可以實現VLOOKUP和HLOOKUP的逆向查找,但逆向查找用INDEX+MATCH組合不是也是很香的嘛。因為畢竟引用範圍的重排是比較性能的,非必要的情況下,不建議使用。

不過話有說回來,IF函數和數組的結合的玩法還是挺有意思的,也可以作為我們平常練習或開拓思路的一種方法,也未嘗不可。由於文章的篇幅,多維引用範圍的重組沒有說到,如果你想了解,可以留言或私信給我,當留言超過20個,我就會解鎖它們的玩法。

有人說學的深了難,夠用就行,可是在成人的世界裡,不難的事,又有幾個是值錢的。學習無非就是,你的一個想法,然後你去不斷判斷,驗證,總結成你的智慧的過程,只要你念念不忘,必有迴響。

好了,今天的文章就到這兒,希望你可以從中有所收穫,也希望你能把你們遇到的問題私信或在文後留言給我。如果你喜歡我的文章,就關注,轉發加點讚,你的每份支持,都是我創作的動力。花葉草木深,工作爭獎金,欲尋其中路,找我胖廖晨。

相關焦點

  • 替換IF函數的3類用法,你知道一切?這有原理,了解一下!
    大家好,我還是那個愛聊Excel的廖晨,前些天,在編寫IF函數的教案時,覺得其中有些可以代替IF函數的用法,還是挺有意思的,就在這裡整理一下,分享給大家。不過在講其它的用法之前,還是得從IF函數的基礎用法說起。
  • SUMIF函數的用法技巧,真的都會用?初級用法,了解一下!
    求和在Excel中是個聊不完的話題,如果SUM求和是個沒有底線的「求和」,而SUMIF就是有底線的」求和「,有底線歸有底線,但還是繼承了SUM函數的一個特性,就是容錯性,即:非數字單元格,會識別為0進行計算。今天我就來聊聊這個有底線的SUMIF函數的用法。
  • Excel函數公式:含金量超高的VLOOKUP、LOOKUP實用技巧解讀
    實際工作中,凡是提到查找引用的,90%以上的人第一時間想到的肯定是VLOOKUP函數,但其實VLOOKUP函數有很多缺點啊,例如不能直接逆向查詢等……但對於LOOKUP函數來說,都是小菜一碟。一、LOOKUP函數功能及語法結構。作用:從單行或單列或數組中查找對應的值。
  • 強大的查找函數 LOOKUP在Excel中到底怎麼用?
    說到查找函數,用的最多的是VLOOKUP。其實還有兩個函數(HLOOKUP,LOOKUP),這三個同屬一個類型(查找)VLOOKUP:縱向查找函數,實用最廣泛的函數,也是必須學會的一個重要函數。HLOOKUP:橫向查找函數,原理和VLOOKUP一樣,只是方向不同,今天主要寫LOOKUP 。VLOOKUP會的,LOOKUP全會。
  • INDEX+MATCH函數真的能替代VLOOKUP函數嗎?我看未必!
    前文發完之後,有個有意思的網友說:簡單表用VLOOKUP,INDEX+MATCH函數不支持排序!看來這位新道友,對MACTH的用法有些不太熟悉啊,哪就必須安排一下,所以今天我就來聊聊這個INDEX+MATCH函數和VLOOKUP函數上用法有什麼細微區別吧。
  • 3種方法,6個函數,講解如何解決多條件查詢問題
    在前兩天的文章裡,分別為大家分享了如何用VLOOKUP函數和一些常用的嵌套函數,進行交叉查詢、多數據返回、逆向查詢等問題。VLOOKUP函數作為職場人必備的強大查找引用函數,有著很廣泛的應用,今天為大家帶來如何用VLOOKUP函數進行多條件查詢。
  • 查詢函數Choose、Lookup、Hlookup、Vlookup應用技巧解讀
    Excel中的查找和引用函數主要用於查找工作表中的所需內容,還可以獲得工作表中的單元格位置或表格大小等信息,如果將查找和引用函數配合其他的Excel函數使用,將會發揮更強大的功能。常用的查詢表中的數據函數有:引用表中數據的函數有:一、Choose函數。
  • 必須掌握的6個查詢函數應用技巧,辦公必備,收藏備用!
    在Excel中,有一類函數被稱為查找和引用函數,今天,小編給大家分享6個查詢函數(Choose、Lookup、Hlookup、Vlookup、Match、Index)的應用技巧,可以收藏備用哦!一、Choose。
  • MM函數雖然有點難,但還是來了
    要進行矩陣乘法運算的兩個數組。2、array1中的列數與 array2中的行數相同,並且這兩個數組必須僅包含數字。3、array1和 array2 可以作為單元格區域、數組常量或引用提供。看完官方說明,有何感受,一臉懵逼屬於正常現象!
  • 4個vlookup函數的高階用法,估計你一種都沒用過
    Hello,大家好,vlookup函數相信大家都非常的熟悉,今天就跟大家分享4個vlookup函數的高階用法,學會它們,你就是公司的大神了。,但是如果工號的第一位或者第二位是0的話,這個0我們是提取不到的,我們點擊這一列,然後按Ctrl+1調出格式窗口,點擊自定義,在類型中輸入6個0,點擊確定,這樣的話就完成了二、合併同類項如下圖,我們想要將相同班級的姓名放在一個單元格中,首先我們班級對照表後面構建一個輔助列,在裡面輸入函數:=B2&
  • Excel函數公式:萬能查找函數Lookup函數的神應用和技巧
    提起查找函數,大家第一時間想到的肯定是Vlookup,其實大多數人不知道,Lookup才是查找函數之王,它幾乎能高效地實現Vlookup函數的所有功能,部分功能是Vlookup函數無法比擬的。一、語法結構和基本使用方法。應用場景:當需要查詢一行或一列並查找另一行或列中的相同位置的值時。
  • IF函數隻用來簡單判斷,那真是太浪費了,教你幾個高手用法
    條件有兩個:大於200, 小於300,用AND()函數檢查兩個條件都需要滿足。用到的公式:=IF(OR(C2>600,B2="T恤"),300,"")五、用IF函數搭配實現VLOOKUP函數逆向查找我們在使用VLOOKUP函數查找匹配數據時,函數要求是從左向右查詢,碰到需要查找左邊的數據時可以移動數據列到右邊。
  • 1個函數1張圖,共25個常用函數,帶你迅速掌握函數
    sumproduct函數:返回相應的數組或區域乘積的和參數Array1,array2,array3, …….最多255個ArrayArray:代表數組或者單元格區域需要注意的是:使用sumproduct函數,參數中的元素數必須相等,比如第一個區域選擇了
  • excel函數公式應用:多列數據條件求和公式知多少?
    這是一個數組公式,需要按住Ctrl、shift和回車鍵完成輸入。 數組有自擴展性,利用這個特性就可以將一列條件與三列數據進行判斷。 如果不習慣三鍵的話,SUM數組公式可以用SUMPRODUCT函數取代。關於SUMPRODUCT函數的用法可以查看《加了*的 SUMPRODUCT函數無所不能》。 公式為:=SUMPRODUCT((B$2:B$16=G2)*C$2:E$16),兩個公式原理完全一致,可以視為同樣的公式。
  • VBA數組是什麼?有何作用?你只需用1分鐘就明白它有什麼作用啦!
    Hello,大家好,在前面我們說過Excel函數中間的數組含義,那麼你是否知道VBA中間的兩個數據處理利器字典+數組呢?他們一旦結合起來將會發揮無可估量的作用,提升執行效率就在分秒之間。今天我們先說說數組,在下期我們會說說字典。那什麼是VBA的數組呢?VBA數組可以理解成是儲存的一組數據的一個地方。
  • lookup函數的使用方法,含向量和數組形式實例及與vlookup的區別
    在 Excel 中,lookup函數有兩種形式,一種為向量形式,另一種為數組形式;其中向量形有三個參數,數組形式有兩個參數,即數組形式省略了返回結果域。無論是向量形式還是數組形式,查找區域必須按升序排序,否則可能返回錯誤的結果;另外,當找不到值時,它們都返回小於或等於查找值的最大值。
  • excel 這也許是史上最好最全的VLOOKUP函數教程
    函數中最受歡迎的有三大家族,一個是以SUM函數為首的求和家族,一個是以VLOOKUP函數為首的查找引用家族,另外一個就是以IF函數為首的邏輯函數家族。根據二八定律,學好這三大家族的函數,就能完成80%的工作。現在一起來學習VLOOKUP函數,讓關於查找的煩惱一次全解決!1、根據番號精確查找俗稱。
  • Excel 的 max 函數又越權了,它竟然攬了按區間查找的活
    對於這一點如果有質疑,不妨參閱一下  Excel–萬萬沒想到,max函數還能用於二維查詢  很多看過上文的讀者都表示:本來以為會的函數,看完後發現不會了。  如果這已經讓人感到震驚,那麼接下來我要講解的案例,可能更加刷新三觀。
  • c語言中sscanf函數的高級用法
    sscanf函數用來從給定字符串中讀取所需數據,用在一些數據轉換時比較方便。常見用法和scanf類似,用%s,%d等獲取字符串和整數。但在%號後可以支持更多的格式,甚至是正則表達式,這樣一來sscanf的功能就比較強大了。
  • Vlookup函數除了查詢引用,它的VBA使用你會嗎
    在工作中,我們在處理大量數據時,會有這樣一種需求,即查詢某個人或某個商品的一個信息。如果我們通過滾動用肉眼去看難免非常的痛苦,畢竟數據太多,那麼聰明的人是怎麼做的呢?對,就是用vlookup函數來實現。本章就圍繞vlookup的查詢引用以及通過VBA返回多個值的方法進行講解。