跳到主要內容跳到頁尾

HLOOKUP 與 LOOKUP:橫向表怎麼查,還有「小於等於的最後一個」

5 分鐘閱讀Lv.3 中級摘要與日期

HLOOKUP 查橫向排列的表、LOOKUP 在排序過的範圍裡找最接近的值。附語法、近似比對一定要排序的原因、找不到時的結果,最後對照 XLOOKUP 的寫法。

發布 更新

文章目錄

拿到一張橫著排的表,品項在第一列、價格在第二列,VLOOKUP 派不上用場,這時候該用 HLOOKUP。

另一個老函式 LOOKUP 的個性比較特別,它要求資料先排序,而且找不到完全一樣的值時,會回傳「小於等於的最後一個」。舊檔案裡還滿常看到這兩個,這篇就把它們的行為整理清楚。

我自己現在幾乎都用 XLOOKUP,不過接手別人留下的表格時,還是得看得懂這兩個。

怎麼選

情況用這個
表是橫的,要用第一列的值去找HLOOKUP
範圍已排序,要找「小於等於的最後一個」LOOKUP 或 HLOOKUP(第四個參數 TRUE)
表是直的VLOOKUP,或直接用 XLOOKUP
不想管方向、排序XLOOKUP

HLOOKUP

HLOOKUP 就是橫著用的 VLOOKUP:在範圍的第一列找值,找到之後,往下數幾列,把那一格的值拿回來。H 是 Horizontal,「水平」的意思。

語法:

  • 查找值:要找的東西。
  • 範圍:整張表,查找值要放在這個範圍的第一列。
  • 列號:找到之後,要回傳範圍裡的第幾列。第一列是 1。
  • 已排序:選填,預設是 TRUE。TRUE 表示第一列已經由小到大排好,找不到完全一樣的值時,會用小於等於的最後一個;FALSE 表示要完全一樣才算找到。

先看一張橫向的菜單,A1:E3:

ABCDE
1品項蘋果紅茶烏龍奶茶蘋果綠茶青茶
2單價45554535
3本週杯數3712821

我想知道「蘋果綠茶」本週賣了幾杯。如果要用 HLOOKUP 寫,就是:

Google 試算表公式
fx

在第一列找蘋果綠茶,回傳第 3 列

=HLOOKUP("蘋果綠茶", A1:E3, 3, FALSE)

來看看結果:你應該會得到 8。把列號改成 2,就是單價, 得到 55。

查不到的值會是 #N/A,例如 。

這邊要記得,名字是文字的時候,第四個參數我一律寫 FALSE。預設的 TRUE 會讓 Sheets 當作第一列已經排好序,品項順序亂的話,結果就不可靠了。

近似比對:用門檻查級距

TRUE 真正好用的地方是查級距。這張運費表,B1:F1 是「重量起」,B2:F2 是對應的運費:

ABCDEF
1重量起(kg)0251020
2運費6080120180260

包裹 7 公斤,落在「5 公斤起」的級距:

Google 試算表公式
fx

7 公斤找不到完全一樣的值,取小於等於的最後一個 5,回傳它下面的運費

=HLOOKUP(7, B1:F2, 2, TRUE)

結果是 120。剛好 5 公斤也是 120,4.9 公斤則是 80,20 公斤以上都是 260。

如果重量比第一個門檻(0)還小,例如 -1,會是 #N/A,因為找不到任何「小於等於」的值。

LOOKUP

LOOKUP 的邏輯跟上面的近似比對一模一樣,只是少了方向的限制,也少了「完全一樣」的選項。

語法:

  • 查找值:要找的東西。
  • 查找範圍:單列或單欄,必須由小到大排序。
  • 結果範圍:選填,找到第幾個位置,就回傳這個範圍同一個位置的值。

一樣用運費表,7 公斤:

Google 試算表公式
fx

在 B1:F1 找小於等於 7 的最後一個,回傳 B2:F2 同位置的運費

=LOOKUP(7, B1:F1, B2:F2)

結果是 120,跟 HLOOKUP 一樣。重量 -1 同樣會得到 #N/A。

有三件事要注意:

  • 查找範圍一定要排序。沒排好的話,LOOKUP 不會報錯,只是給你一個看起來合理、其實不對的值,這種錯最難抓。
  • 它只會做近似比對,沒有「完全一樣才算」的模式。查名稱時,找不到完全一樣的項目,只要不是比第一項還小,也會回傳排序上前面的那一項,不會出現 #N/A。名稱查找請用 HLOOKUP、VLOOKUP 的 FALSE,或 XLOOKUP。
  • 只給兩個參數時,它是陣列模式。 會在第一列找,回傳最後一列同位置的值,也是 120。

取欄位裡最後一個有值的儲存格

LOOKUP 有個老技巧:把「找不到的東西」故意設成一個很大的數字,它就會停在最後一個符合的位置。

假設 A1:A6 是每天的杯數,中間有空格,我想拿最後一天有填的那一筆:

Google 試算表公式
fx

用 1/(條件) 造出由 1 與錯誤組成的陣列,LOOKUP 找 2 會停在最後一個 1

=LOOKUP(2, ARRAYFORMULA(1/(A1:A6<>"")), A1:A6)

A1:A6<>"" 對有值的格子是 TRUE,1/TRUE 是 1,空格的 1/FALSE 是錯誤。2 比所有 1 都大,所以停在最後一個 1,也就是最後一個有值的位置。資料是 37、8、空、21、空、16 的話,會得到 16。

這招我不太推薦新手用,讀的人要想一下才看得懂。現在可以先用 FILTER 濾掉空格,再取最後一筆,讀起來直白很多。

換成 XLOOKUP

上面兩個函式做的事,XLOOKUP 都能做,而且不用排序。細節在 XLOOKUP 入門,這邊只看和運費表有關的寫法。

用 7 公斤查運費,比對模式填 -1,意思是「找不到完全一樣的值,就取下一個比較小的」:

Google 試算表公式
fx

比對模式 -1:完全一樣,或下一個較小的值

=XLOOKUP(7, B1:F1, B2:F2, , -1)

結果是 120。第四個參數留空,是不指定找不到時的顯示值;要自訂的話, 會顯示「不在表內」,比 #N/A 好讀。

最大的差別是 XLOOKUP 的近似比對不需要先排序,查找範圍橫著直著都可以,往左查也沒問題。

兩個函式的參數可以這樣對應:

想做的事HLOOKUPXLOOKUP
完全一樣才算第四個參數 FALSE預設就是
小於等於的最後一個TRUE,且第一列要排序比對模式 -1,不用排序
找不到時顯示文字外面包 IFERROR第四個參數
回傳第幾列數字列號直接選結果範圍

HLOOKUP 的列號是數字,表格中間插入一列,數字不會跟著變,公式就悄悄指到錯的列。這是我最討厭它的地方。

如果檔案還要拿到 Excel 用,要注意 Excel 的 XLOOKUP 只有 Excel 365、2024、2021 才有,2019 以前的版本沒有。這也是舊檔案至今還在用 HLOOKUP、LOOKUP 的原因之一。

接手舊檔案看到這兩個函式時,先確認第一列、第一欄有沒有排序,再決定要不要改寫。

分享:
#HLOOKUP#LOOKUP#查找函式#近似比對
喜特先生 Mr. Sheet

喜特先生 Mr. Sheet

數據分析師/商業分析師

八年工作經驗,跨不同業界解決數據需求。做過的案例都整理在作品集。

接下來可以

相關文章

查看所有文章

留言討論

共 0 則留言

訂閱電子報,新文章上線就通知你

免費,隨時可取消。

送出即表示同意服務條款與隱私權政策。