秘訣
試試使用新的 XLOOKUP 和 XMATCH 函式,這是本文描述函數的改良版。 這些新功能可任意方向運作,預設會回傳精確匹配,使它們比前代更簡單且方便。
假設你有一份辦公室位置號碼清單,並且你需要知道每個辦公室有哪些員工。 試算表非常龐大,你可能會覺得這是個挑戰性的任務。 其實用查詢函數很容易做到。
VLOOKUP 和 HLOOKUP 函式,連同 INDEX 和 MATCH,是 Excel 中最實用的函式之一。
注意
查詢精靈功能已不再在 Excel 中提供。
這裡有一個使用 VLOOKUP 的範例。
=VLOOKUP(B2,C2:E7,3,TRUE)
在這個例子中,B2 是第一個 參數——函數需要運作的資料元素。 對於 VLOOKUP,這個第一個參數就是你想要找到的值。 這個參數可以是格子參考,或是固定值,例如「smith」或 21,000。 第二個參數是搜尋你想找到值的格子範圍 C2-:E7。 第三個參數是該區間中包含你想要值的欄位。
第四個引數為選用。 輸入 TRUE 或 FALSE。 如果您輸入 TRUE,或將引數留白,函數會傳回您在第一個引數中指定的大約符合值。 如果您輸入 FALSE,則函數會符合第一個引數提供的值。 換句話說,第四個論點留空或輸入 TRUE,能讓你有更多彈性。
此範例顯示函數如何運作。 當你在第一個參數) (B2 輸入值時,VLOOKUP 會搜尋範圍 C2:E7 (第二個參數) ,並回傳第三欄 E (第三個參數) 的近似匹配值。
第四個參數為空,因此函數回傳近似匹配。 如果未傳回,您必須輸入欄 C 或 D 的其中一個值以取得結果。
當你對 VLOOKUP 感到熟悉時,HLOOKUP 函式同樣容易使用。 你輸入相同的參數,但它是以列為單位搜尋,而非欄位。
使用 INDEX 和 MATCH 代替 VLOOKUP
使用 VLOOKUP 有一些限制——VLOOKUP 函數只能從左到右查找一個數值。 這表示你查詢的值欄應該總是放在回傳值欄的左側。 如果你的試算表不是這樣設計的,那就不要用 VLOOKUP。 改用 INDEX 和 MATCH 功能的組合。
此範例顯示一份小型清單,其中包含我們所要搜尋的值 (芝加哥),但這並非位於最左邊的欄。 因此,我們無法使用 VLOOKUP。 我們將改用 MATCH 函數在範圍 B1:B11 中尋找「芝加哥」。 我們在列 4 中找到該值。 接著,INDEX 函數會將該值作為查閱引數,然後在第 4 欄 (欄 D) 中尋找芝加哥的人口。 所使用的公式顯示於儲存格 A14 中。
小試身手
如果你想先嘗試查找函數,再用自己的資料嘗試,這裡有一些範例資料。
VLOOKUP 工作範例
將以下資料複製到空白試算表中。
秘訣
在將資料貼上到 Excel 之前,先將 A 到 C 欄的欄寬設為 250 像素,然後點擊「 Wrap Text (Home 標籤,對 齊 群組) 」。
密度
黏度
溫度
0.457
3.55
500
0.525
3.25
400
0.606
2.93
300
0.675
2.75
250
0.746
2.57
200
0.835
2.38
150
0.946
2.17
100
1.09
1.95
50
1.29
1.71
0
公式
描述
結果
=VLOOKUP(1,A2:C10,2)
在 A 欄中尋找大約符合 1 的值,在 A 欄中找到一個小於或等於 1 的最大值 (0.946),再傳回 B 欄中同一列的值。
2.17
=VLOOKUP(1,A2:C10,3,TRUE)
在 A 欄中尋找大約符合 1 的值,在 A 欄中找到一個小於或等於 1 的最大值 (0.946),再傳回 C 欄中同一列的值。
100
=VLOOKUP(0.7,A2:C10,3,FALSE)
在 A 欄中尋找完全符合 0.7 的值。因為 A 欄中沒有完全符合的值,因此傳回錯誤。
#N/A
=VLOOKUP(0.1,A2:C10,2,TRUE)
在 A 欄中尋找大約符合 0.1 的值。因為 0.1 小於 A 欄中的最小值,因此傳回錯誤。
#N/A
=VLOOKUP(2,A2:C10,2,TRUE)
在 A 欄中尋找大約符合 2 的值,在 A 欄中找到一個小於或等於 2 的最大值 (1.29),再傳回 B 欄中同一列的值。
1.71
HLOOKUP 範例
複製這個資料表中的所有儲存格,並貼到 Excel 空白工作表的 A1 儲存格中。
秘訣
在將資料貼上到 Excel 之前,先將 A 到 C 欄的欄寬設為 250 像素,然後點擊「 Wrap Text (Home 標籤,對 齊 群組) 」。
輪軸
軸承
螺栓
4
4
9
5
7
10
6
8
11
公式
描述
結果
=HLOOKUP("輪軸", A1:C4, 2, TRUE)
在列 1 中查詢 "輪軸",從同一欄 (欄 A) 的列 2 傳回值。
4
=HLOOKUP("軸承", A1:C4, 3, FALSE)
在列 1 中查詢 "軸承",從同一欄 (欄 B) 的列 3 傳回值。
7
=HLOOKUP("B", A1:C4, 3, TRUE)
在列 1 中查詢 "B",從同一欄的列 3 傳回值。 由於找不到與 "B" 完全相符的項目,因此使用列 1 中小於 "B" 的最大值:欄 A 中的 "輪軸"。
5
=HLOOKUP("螺栓", A1:C4, 4)
在列 1 中查詢 "螺栓",從同一欄 (欄 C) 的列 4 傳回值。
11
=HLOOKUP(3, {1,2,3;"a","b","c";"d","e","f"}, 2, TRUE)
在三列的常數陣列中查詢數字 3,並從同一欄 (在此案例中為第三欄) 的列 2 傳回值。 常數陣列中有三列的值,每一列均以分號 (;) 區隔。 由於在列 2 找到 "c",而在同一欄是 3,因此會傳回 "c"。
c
索引與匹配範例
此最後範例結合 INDEX 與 MATCH 函數,回傳五個城市中最早的發票號碼及其對應日期。 因為日期會以數值的形式傳回,所以我們使用 TEXT 函數將其格式設定為日期。 實際上,INDEX 函數會使用 MATCH 函數的結果作為引數。 INDEX 和 MATCH 函數的組合在每個公式中會有兩次的運用——首先用於傳回發票編號,再用於傳回日期。
複製這個資料表中的所有儲存格,並貼到 Excel 空白工作表的 A1 儲存格中。
秘訣
在將資料貼上到 Excel 之前,先將 A 到 D 欄的欄寬設為 250 像素,然後點選「 Wrap Text (Home 標籤,對 齊 群組) 」。
發票
城市
發票日期
最早發票 (依城市) 與日期
3115
亞特蘭大
4/7/12
="亞特蘭大 = "&INDEX($A$2:$C$33,MATCH("亞特蘭大",$B$2:$B$33,0),1)& ", 發票日期: " & TEXT(INDEX($A$2:$C$33,MATCH("亞特蘭大",$B$2:$B$33,0),3),"m/d/yy")
3137
亞特蘭大
4/9/12
="奧斯丁 = "&INDEX($A$2:$C$33,MATCH("奧斯丁",$B$2:$B$33,0),1)& ", 發票日期: " & TEXT(INDEX($A$2:$C$33,MATCH("奧斯丁",$B$2:$B$33,0),3),"m/d/yy")
3154
亞特蘭大
4/11/12
="達拉斯 = "&INDEX($A$2:$C$33,MATCH("達拉斯",$B$2:$B$33,0),1)& ", 發票日期: " & TEXT(INDEX($A$2:$C$33,MATCH("達拉斯",$B$2:$B$33,0),3),"m/d/yy")
3191
亞特蘭大
4/21/12
="紐奧良 = "&INDEX($A$2:$C$33,MATCH("紐奧良",$B$2:$B$33,0),1)& ", 發票日期: " & TEXT(INDEX($A$2:$C$33,MATCH("紐奧良",$B$2:$B$33,0),3),"m/d/yy")
3293
亞特蘭大
4/25/12
="坦帕 = "&INDEX($A$2:$C$33,MATCH("坦帕",$B$2:$B$33,0),1)& ", 發票日期: " & TEXT(INDEX($A$2:$C$33,MATCH("坦帕",$B$2:$B$33,0),3),"m/d/yy")
3331
亞特蘭大
4/27/12
3350
亞特蘭大
4/28/12
3390
亞特蘭大
5/1/12
3441
亞特蘭大
5/2/12
3517
亞特蘭大
5/8/12
3124
奧斯丁
4/9/12
3155
奧斯丁
4/11/12
3177
奧斯丁
4/19/12
3357
奧斯丁
4/28/12
3492
奧斯丁
5/6/12
3316
達拉斯
4/25/12
3346
達拉斯
4/28/12
3372
達拉斯
5/1/12
3414
達拉斯
5/1/12
3451
達拉斯
5/2/12
3467
達拉斯
5/2/12
3474
達拉斯
5/4/12
3490
達拉斯
5/5/12
3503
達拉斯
5/8/12
3151
紐奧良
4/9/12
3438
紐奧良
5/2/12
3471
紐奧良
5/4/12
3160
坦帕
4/18/12
3328
坦帕
4/26/12
3368
坦帕
4/29/12
3420
坦帕
5/1/12
3501
坦帕
5/6/12
另請參閱
快速參考卡:VLOOKUP 進修課程
查閱與參照函數 (參照)
在 VLOOKUP 函數中使用 table_array 引數
免費在網路上開始使用 Excel