=HLOOKUP("Mar",A1:E3,2,FALSE) 在 A1:E3 的第一行中查找 Mar,并返回同一列第二行的值。它就是把 VLOOKUP 横过来用,适合标签横排在表格顶部的表格。
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Month | Jan | Feb | Mar | Apr |
| 2 | Sales | 4,200 | 3,900 | 4,800 | 5,100 |
| 3 | Costs | 2,600 | 2,500 | 2,900 | 3,000 |
| 4 | |||||
| 5 | Month | Mar | |||
| 6 | Sales | 4,800 |
B6 在第 1 行中查找 Mar,在 D 列找到它,并返回该列第 2 行的值:4,800。在 B5 中选择 Apr 会得到 5,100;把公式中的 2 改成 3 则会得到成本。
HLOOKUP 语法
=HLOOKUP(lookup_value, table_array, row_index_num, [range_lookup])
lookup_value:要在表格第一行中查找的值。table_array:表格。HLOOKUP 只在它的最上面一行中查找。row_index_num:要返回第几行,最上面一行算作 1。数字超过表格的行数会得到 #REF!;0 会得到 #VALUE!。range_lookup:FALSE表示精确匹配。TRUE或省略表示在已排序的行中近似匹配。
匹配时不区分大小写(mar 也能找到 Mar),使用 FALSE 时查找值可以带通配符 * 和 ?。不在第一行中的值会返回 #N/A。
按行近似匹配
使用 TRUE 时,HLOOKUP 会找到小于或等于查找值的最大标题。第一行必须从左到右按升序排列。
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Weight from (kg) | 0 | 2 | 5 | 10 |
| 2 | Cost | $4.50 | $6.00 | $9.50 | $14.00 |
| 3 | |||||
| 4 | Parcel (kg) | 7 | |||
| 5 | Cost | $9.50 |
7 kg 不是任何一个标题。不超过它的最大标题是 5,所以 B5 返回 4.50,改成 12 会得到 $14.00。公式中的表格是 B1:E2 而不是 A1:E2:它从第一个重量开始,这样 A1 中的文本标签就不属于已排序的那一行。
用 XLOOKUP 按行查找
在 Excel 2021 和 Microsoft 365 中,XLOOKUP 取代了 HLOOKUP。它把要查找的行和要返回的行作为两个区域分别传入,所以不用去数行号;返回区域有好几行高时,还能把整列一起带回来。
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Month | Jan | Feb | Mar | Apr |
| 2 | Sales | 4,200 | 3,900 | 4,800 | 5,100 |
| 3 | Costs | 2,600 | 2,500 | 2,900 | 3,000 |
| 4 | Profit | 1,600 | 1,400 | 1,900 | 2,100 |
| 5 | |||||
| 6 | Month | Feb | |||
| 7 | Figures | 3,900 | |||
| 8 | 2,500 | ||||
| 9 | 1,400 |
B7 中的一个公式把 Feb 的三个数字沿 B7:B9 向下溢出:3,900、2,500 和 1,400。如果 B8 或 B9 中有内容,B7 就会显示 #SPILL!。XLOOKUP 的其他选项,比如找不到时的提示信息和查找最后一个匹配项,见 XLOOKUP 一文。
换个思路,把表格转过来:TRANSPOSE
有时更好的办法是做一份竖向的表格副本。=TRANSPOSE(A1:D3) 返回同样的单元格,只是行和列互换了,而且它和原表格保持关联。之后 VLOOKUP、FILTER 和图表都能照常使用它。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Month | Jan | Feb | Mar |
| 2 | Sales | 4,200 | 3,900 | 4,800 |
| 3 | Costs | 2,600 | 2,500 | 2,900 |
| 4 | ||||
| 5 | Month | Sales | Costs | |
| 6 | Jan | 4,200 | 2,600 | |
| 7 | Feb | 3,900 | 2,500 | |
| 8 | Mar | 4,800 | 2,900 |
A5 溢出一个 4 行 3 列的区域:月份排在左侧,Sales 和 Costs 排在顶部。把 C2 中 Feb 的销售额改成 4100,副本会跟着变。如果只想不用公式复制一次,选中表格并复制,然后使用“开始 > 粘贴 > 选择性粘贴”,勾选“转置”。
练习:某个月的成本
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Month | Jan | Feb | Mar | Apr |
| 2 | Sales | 4,200 | 3,900 | 4,800 | 5,100 |
| 3 | Costs | 2,600 | 2,500 | 2,900 | 3,000 |
| 4 | |||||
| 5 | Month | Apr | |||
| 6 | Costs |
轮到你了: 在 B6 中用 HLOOKUP 返回 B5 中月份的成本。
常见问题
VLOOKUP 和 HLOOKUP 有什么区别?
VLOOKUP 沿表格的第一列向下查找,返回右侧某一列中的值。HLOOKUP 沿第一行横向查找,返回下方某一行中的值。两者的参数相同,只是用行号代替了列号。
HLOOKUP 中的行号是什么?
要返回的那一行的序号,从表格的第一行算起,第一行为 1。在 =HLOOKUP("Mar",A1:E3,3,FALSE) 中,3 表示 A1:E3 的第三行。行号超过表格的行数会返回 #REF!。
XLOOKUP 能代替 HLOOKUP 吗?
能。XLOOKUP 两个方向都能查找:=XLOOKUP("Mar",B1:E1,B2:E2) 在一行中查找,并从另一行返回结果。它需要 Excel 2021 或 Microsoft 365。
HLOOKUP 为什么返回 #N/A?
查找值不在表格的第一行中:可能是拼写错误、多了空格、数字以文本形式存储,或者这个值在另一行里。最后一个参数为 TRUE 时,比第一个标题还小的值也会返回 #N/A。