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

2020-12-08 小哥聊經驗

花葉草木深,工作要加薪。最近收到資深粉絲髮來的私信:廖老師,我對於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個,我就會解鎖它們的玩法。

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

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

相關焦點

  • 逆向查找函數,你更喜歡哪種查詢方式?
    這個函數的官方語法如下:這個函數的通俗一點的用法,如下所示:+VLOOKUP(要查找什麼值,在哪個區域查找,在要查找的區域中的第幾列,是否需要精確查找)我們還是舉一個例子吧,如下圖所示:我們根據姓名查詢她的績效分。
  • excel函數技巧:兩個查詢函數的用法比較 終
    若包含,則返回簡稱在全稱中出現的位置,否則公式返回錯誤值#VALUE!。於是0/FIND(A2:A9,D3)即返回一組由數字0和錯誤值組成的有序數組,數字0在數組中的位置即查詢返回值所在行。接著LOOKUP函數開始發揮作用,忽略錯誤值,返回小於且最接近於目標值1的查詢區域值所對應的值,即最後一個0值所對應的B6的值。詳細解讀如下:彩蛋1:你發現了嗎?
  • excel函數技巧:兩個查詢函數的用法比較 續二
    前面說到一直處於下風的LOOKUP,終於在第四回合的較量中,扳回一局。今天比拼的項目是橫向和逆向查詢。看樣子,這似乎對縱向查詢的VLOOKUP不太友好啊!LOOKUP又能否乘勝追擊,再贏一輪呢?讓我們拭目以待!——————————————面對VLOOKUP的步步緊逼,LOOKUP終於在第四回合的較量中,憑藉二分法遏住頹勢。
  • 替換IF函數的3類用法,你知道一切?這有原理,了解一下!
    大家好,我還是那個愛聊Excel的廖晨,前些天,在編寫IF函數的教案時,覺得其中有些可以代替IF函數的用法,還是挺有意思的,就在這裡整理一下,分享給大家。不過在講其它的用法之前,還是得從IF函數的基礎用法說起。
  • LOOKUP函數的幾種經典用法
    篇外話:對於lookup的計算原理,可以自行百度搜索Excel二分法原理了解,這方面的內容要細說比較複雜,不過要想用好lookup
  • SUMIFS函數多條件求和,你真的會用嗎?這有用法介紹,了解一下!
    ~)N:最多支持127對條件組合;由於求和區域和條件區域必須保證一樣的列數和行數,我們通常將整列作為求和或條件區域的參數,下面就通過例子來近距離了解一下SUMIFS函數的用法有哪些吧!而函數生成的數組的位置和表格中的相對位置行數和列數都相差1,最終B2的公式調整為:=INDEX(SUMIFS(Sheet1!
  • 你知道Excel中如何進行逆向匹配嗎?
    跟想像中怎麼會有點不一樣呢?於是乎又去查了一下VLOOKUP的用法。第三個參數col_index_num為table_array 中查找數據的數據列序號。col_index_num 為 1 時,返回 table_array 第一列的數值,col_index_num 為 2 時,返回 table_array 第二列的數值,以此類推。
  • CHOOSE函數精講,結合VLOOKUP數組選擇,解決逆向查找問題
    析:本例中CHOOSE函數的參數值為{1,2}的數組,所以函數會對B2:B30,A2:A30的兩個區域進行重複多次運算。通過CHOOSE函數對原數據的兩列內容互換後,便將性名列放在了首列,再利用VLOOKUP函數通過對姓名的查詢返回學號本例中公式也可表達為「=VLOOKUP(D2,CHOOSE({2,1},A2:A30,B2:B30),2,FALSE)」,也能達到相同的效果。
  • Excel技巧講解(五)-VLOOKUP函數怎麼用 之 逆向查詢
    Excel技巧講解(五)-VLOOKUP函數怎麼用 之 逆向查詢VLOOKUP逆向查詢技巧我們已經通過前面的講解,掌握了VLOOKUP函數的多種查詢技巧,但是我們發現VLOOKUP只能是從首列開始查找,只能是返回表格中首列右側的內容
  • excel函數應用:IF函數新用法加寬工作思路
    用ISTEXT做一下判斷,再結合減負函數就得到了結果。多練習,你也會掌握的。>在C2單元格輸入函數,下拉填充柄填充C2:C9區域:=IF(B2>=95,"優",IF(B2>=80,"良",IF(B2>=60,"中","差")))這是一個相當簡單的函數,但是依然有很多同學寫錯,究其原因還是沒有理解IF函數的運行原理,IF函數的運行是有層級順序的
  • vlookup函數不止是單條件查詢,特殊的數組查詢並求和才算高效
    vlookup函數相信對於大家來說都不陌生,大家都知道這個函數可以進行各式各樣的數據查詢操作。單條件查詢、多條件查詢、逆向查詢、一對多查詢等等,這些操作vlookup函數都可以實現。下面我們來學習一下vlookup數組嵌套的另外一種方式,如何對查詢出來的多個條件值進行快速求和。案例說明:利用vlookup函數查詢對應人員2、3兩個月數據並進行求和案例說明:如上圖所示,我們利用vlookup函數,需要查詢對應人員2月、3月兩個月的數據,查詢出來後進行數據求和。
  • VLOOKUP函數的七種典型用法,你都會了嗎?
    小夥伴們好啊,今天和大家來說說VLOOKUP的那些事兒,深入了解一下VLOOKUP函數的各種用法,看看這位大眾情人還藏著多少不為人知的秘密。
  • 你還不會逆向查找?這三個小技巧分享給你!
    作為一名數據分析師,工作中打交道最多的就是數據,大部分都是用Excel處理,很早之前覺得數據匹配查詢只用vlookup函數就夠了,但是vlookup函數有個弊端,就是無法反向查找。如下圖所示,用姓名去查找工號,單獨用vlookup函數是無法完成的;平時遇到這種情況,個人最常用的方法就是將數據源中的B列姓名複製到A列工號之前,在利用vlookup函數匹配,但是在遇到表格數據較多,或者表格操作空間較少,這種方法較為耗時,可操作性差。那麼有其它辦法嗎?
  • VLOOKUP函數的七種典型用法,你會幾種?
    今天和大家來說說VLOOKUP的那些事兒,深入了解一下VLOOKUP
  • 詳解VLOOKUP函數逆向查找,不但要學會,還要懂它的原理
    VLOOKUP函數是不能逆向查找的,這個相信掌握這個函數的人們都知道。筆者當年學這個函數的時候,有時候碰到逆向查找,當時就想第三個參數是正數時向後查找,那麼負數時是不是向前查找?結果肯定是不可行的。今天給大家帶來用VLOOKUP函數逆向查找,要實現這個功能,僅靠VLOOKUP一個函數是不能解決的,需要和其它函數嵌套才能解決這個問題。如下圖,我們根據姓名來查找其所在的部門。要解決這個問題,如果把B列和A列對換一下位置可以用VLOOKUP函數的基本操作來實現。
  • 最熟悉的查找函數LOOKUP,你知道他有多麼強大嗎
    我們今天接下來和你說的是在Excel的中的數據查找函數,相信我們一說到查找函數,你必定會想起來VLOOKUP函數吧!但是在很多的時候,這個函數在查找方面,也是挺無能無力的,比如逆向查找,多條件查找,那就不能輕易的實現這個查找功能。有句話說的好,既生瑜何生亮呢?
  • SUMIF函數的用法技巧,真的都會用?初級用法,了解一下!
    求和在Excel中是個聊不完的話題,如果SUM求和是個沒有底線的「求和」,而SUMIF就是有底線的」求和「,有底線歸有底線,但還是繼承了SUM函數的一個特性,就是容錯性,即:非數字單元格,會識別為0進行計算。今天我就來聊聊這個有底線的SUMIF函數的用法。
  • Excel教程:函數VLOOKUP實用技巧
    其中的VLOOKUP函數是工作中最常用的一種查找函數,掌握好VLOOKUP函數能夠極大提高工作的效率。也是大部分小夥伴接觸的第一個函數,幾乎每天都在用,頻率很高。但是,大部分小夥伴都是停留在基本的用法上,而且也發現了VLOOKUP函數的一些缺點,比如:不能逆向查找、不能多條件查找、不能返回多列等問題。下面我就和大家分享一下VLOOKUP函數的一些使用技巧,解決這些貌似不能的問題。
  • 學會VLOOKUP函數一點都不難!只需會這3個用法就行了
    大家好,我是愛講Excel的小胖子廖晨,我們先來解答一下前文的問題:部門員工表中,能用INDEX和MATCH函數實現查詢銷售4的王城銀所在的位置?我會在介紹數組的文中詳細介紹原理以及數組還有哪些其他的玩法,這都是後話,解決了上文的問題,下面我們開始介紹今天的主咖,號稱查詢函數中的三劍客(VLOOKUP,HLOOKUP,LOOKUP)之一的VLOOKUP函數。
  • excel函數技巧:兩個查詢函數的用法比較 下
    在前兩個回合中,VLOOKUP旗開得勝,連勝兩局。第三回合是交叉查詢,LOOKUP能否展開反擊止住頹勢呢?—————————————————VLOOKUP和LOOKUP這對高頻函數的較量註定是場持久戰。在前兩個回合的較量中,VLOOKUP佔據上風,此番更要乘勝追擊。新一輪較量,即刻開戰!