1 HLOOKUP函數(shù)
與VLOOKUP相對應的有一個LOOKUP函數(shù),還有一個HLOOKUP……什么?
HLOOKUP常年處于隱居狀態(tài),據(jù)說非有緣不得見。VLOOKUP的V是vertical垂直縱向查詢之意,HLOOKUP的H是Horizontal水平橫向之意,其主要作用也就是橫向查詢。
語法結(jié)構(gòu)如下:
=HLOOKUP(找誰?在哪里找?查找的結(jié)果在查找范圍的第幾行?零失誤精確找還是隨便找找?)
HLOOKUP的語法結(jié)構(gòu)和VLOOKUP幾乎一模一樣。只是第3參數(shù)從VLOOKUP查找結(jié)果在查找范圍的第幾列,變成了第幾行……:
舉個栗子。

如上圖所示,需要查詢B8單元格指定姓名(比如“李清照”),在B9單元格指定月份(比如3月)的銷售金額。
B10單元格公式如下:
=HLOOKUP(B8,A1:E5,MATCH(B9,A:A,0),0)
HLOOKUP默認查找范圍的首行為匹配行,從中搜索B8單元格的值首次出現(xiàn)在查找范圍的第幾列,第3參數(shù)是一個MATCH函數(shù),用于計算查找值在查找范圍的第幾行,行列交叉之處,即為目標值。
當然,該例我們也可以使用VLOOKUP函數(shù),公式如下:
=VLOOKUP(B9,A1:E5,MATCH(B8,1:1,0),0)
還可以使用INDEX+MATCH函數(shù),公式如下:
=INDEX(A1:E5,MATCH(B9,A:A,0),MATCH(B8,1:1,0))
提供另外兩種函數(shù)的解法倒不是我想灌水,而是揭露一個問題。我們上面說HLOOKUP常年處于隱居狀態(tài),那是給她留面子,坦率而言,在VLOOKUP和INDEX的夾擊之下,這家伙基本上是英雄無用武之地。
2 認識LOOKUP
話說十年之前,Excel函數(shù)方興未艾,大家對函數(shù)世界的探索還很熱情,LOOKUP是那時公認的超級函數(shù)之一。超級有兩方面的意思,一方面是LOOKUP非常強大,在數(shù)據(jù)查詢的問題上,基本沒有什么是它解決不掉的事;另一方面是這家伙非常復雜,甚至有人根據(jù)它的語法,猜想出該函數(shù)使用了編程上的經(jīng)典算法二分法(不過后來證明這猜想在邏輯上完全不能自洽)。
——這是十年之前。如今十年過去了,再復雜的函數(shù)也都被總結(jié)出簡單的套路了。
LOOKUP函數(shù)的官方語法有兩個——但都沒有太大實用價值。這個函數(shù)已經(jīng)被玩到官方定義的語法成為廢紙、民間的套路成為事實上的語法的地步;所以所謂官方語法看一眼就好。
語法1,向量形式:
=LOOKUP(lookup_value,lookup_vector,result_vector)
語法2,數(shù)組形式:
= LOOKUP(lookup_value,array)
核心法則也就只有兩個:區(qū)間查詢和條件查詢。
3 LOOKUP的區(qū)間查詢
LOOKUP函數(shù)的區(qū)間查詢套路格式如下:
=LOOKUP(查找值,首列升序排列的查找區(qū)域,結(jié)果區(qū)域)
需要說明的是,使用此套路時,查找范圍的首列必須升序排列。
舉個例子。
如下圖所示,需要根據(jù)F:G的評分標準,對A:C數(shù)據(jù)區(qū)域的得分作評級。將查詢區(qū)域劃分為了多個區(qū)間,并升序排列。
C2公式如下:
=LOOKUP(B2,F:F,G:G)
F列是升序排列的查找區(qū)域,G列是其對應的結(jié)果區(qū)域。
……可能需要再次強調(diào)的是,這種區(qū)間查詢方式,要求查找區(qū)域的首列必須升級排列!有朋友可能會說F列沒有升序排列?。縁2單元格的0比F1單元格的"分數(shù)"小。這沒事,LOOKUP聰明的很,你不說他都知道F1是不是標題行。 還記得SUMIF嗎?還是那句話,它們身為長子,不聰明是不行滴。
本例也可以使用以下公式:
=LOOKUP(B2,F:G)
這是因為當查找區(qū)域是多列,同時又省略結(jié)果區(qū)域時,比如上述公式,LOOKUP默認查找區(qū)域的首列(F列)為查找區(qū)域,同時默認其末列(G列)為結(jié)果區(qū)域。

注意,我說的是末列,而不是第2列。
例如,在D2單元格輸入以下公式可以返回H列的評級
=LOOKUP(B2,F:H)
LOOKUP默認首列F列為查找區(qū)域,末列H列為結(jié)果區(qū)域。

4 條件查詢:
LOOKUP的條件查詢套路格式如下:
=LOOKUP(一個比查找范圍內(nèi)所有同類型值都大的值,查找范圍,結(jié)果區(qū)域)
該套路固定返回查找區(qū)域最后一個同類型數(shù)據(jù)所對應的結(jié)果。
比如,查找A列最后出現(xiàn)的文本:
=LOOKUP("座",A:A,A:A)
“座”是文本型數(shù)據(jù)里極大的值,比絕大部分常見的文本值均大,因而該公式返回A列最后出現(xiàn)的文本值。由于該公式的查找區(qū)域和結(jié)果區(qū)域是相同的,也可以寫為以下形式:
=LOOKUP("座",A:A)
當省略結(jié)果區(qū)域時,LOOKUP默認查找區(qū)域即為結(jié)果區(qū)域。
再比如,查找A列最后出現(xiàn)的數(shù)值:
=LOOKUP(9^9,A:A)
9^9是9的9次方,一個極大的數(shù)值,比絕大部分數(shù)值均大,因而該公式返回A列最后一個數(shù)值。


覺得這個套路沒有什么實用價值?
那我們就把這個套路換個形式延伸一下……
如下圖所示,需要查詢D2單元格指定人名的考試成績。

這是一個單條件的查詢問題,LOOKUP公式如下:
=LOOKUP(1,0/(A1:A10=D2),B1:B10)
(A1:A10=D2)部分判斷A1:A10區(qū)域的值是否等于D2,返回由邏輯值TRUE和FALSE組成的內(nèi)存數(shù)組:
{FALSE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE}
使用0除以該數(shù)組,0/TRUE結(jié)果為0,0/FALSE結(jié)果為錯誤值#DIV/0!,也就返回一個由0和錯誤值構(gòu)成的內(nèi)存數(shù)組:
{#DIV/0!;0;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!}
LOOKUP自帶天賦忽略錯誤值,而查找值1又比查找范圍內(nèi)所有的0都大,因而該公式可以直接返回最后一個符合條件的值所對應的結(jié)果。
該公式總結(jié)一下,也就成了LOOKUP單條件查詢的經(jīng)典套路:
=LOOKUP(1,0/(條件區(qū)域1=條件值),結(jié)果)
……