在 XLOOKUP 和 VLOOKUP 之间选择时,如果所有打开文件的人都使用 Excel for Microsoft 365、Excel 2021 或更高版本,或网页版 Excel,请使用 XLOOKUP。它能做到 VLOOKUP 的所有事情,而且更不容易出错:默认精确匹配,可以向左查找,插入列时也不会出问题。只有当工作簿必须在 Excel 2019 或更早版本中使用时,才用 VLOOKUP。
兼容性是主要的注意事项。Excel 2016 和 2019 中没有 XLOOKUP,所以对于仍在使用这些版本的人,满是 XLOOKUP 公式的文件会显示 #NAME? 错误。
本文中的公式按英文版 Excel 中的写法显示。中文版 Excel 同样使用 VLOOKUP 和 XLOOKUP 这些英文函数名称,参数之间同样使用逗号分隔。
| VLOOKUP | XLOOKUP | |
|---|---|---|
| 向左查找(返回查找列左侧的列) | 不能 | 可以 |
| 默认匹配类型 | 近似匹配(除非添加 FALSE) | 精确匹配 |
| 插入或删除列后是否仍然正确 | 否,列序号固定不变 | 是,区域会自动调整 |
| 自定义“未找到”提示 | 需要 IFNA 或 IFERROR | 内置(if_not_found) |
| 一次返回多列 | 不方便 | 可以,结果会溢出 |
| 从最后一个匹配项向上搜索 | 不能 | 可以(search_mode -1) |
| 近似匹配 | 数据必须按升序排序 | 取下一个较小或较大的值,无需排序 |
通配符(*、?) | 可以,需精确匹配 | 可以,需 match_mode 2 |
| 横向查找 | 不能,那是 HLOOKUP | 可以,同一个函数 |
| 速度 | 在一般工作簿中没有实际差别 | 相同,另可对已排序数据使用二分查找 |
| 可用版本 | 所有版本的 Excel | Microsoft 365、Excel 2021、Excel 2024、网页版 Excel、移动应用 |
语法对比
=VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])
=XLOOKUP(lookup_value, lookup_array, return_array, [if_not_found], [match_mode], [search_mode])
最大的区别在于如何告诉 Excel 答案在哪里。VLOOKUP 接收整个表格,以及从该表格左边缘开始数的 列序号。XLOOKUP 则接收两个独立的区域:用于搜索的列和用于返回结果的列。
用两种方式写出同一个查找
下面是 A1:D6 中的一张小型产品列表,G2 中输入了产品 ID:
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Product ID | Product | Category | Price |
| 2 | P-101 | Wireless Mouse | Accessories | $24.99 |
| 3 | P-102 | USB-C Hub | Accessories | $39.50 |
| 4 | P-103 | Laptop Stand | Office | $45.00 |
| 5 | P-104 | Webcam HD | Video | $59.00 |
| 6 | P-105 | Desk Lamp | Office | $32.75 |
要查找 P-104 的价格:
=VLOOKUP(G2, A2:D6, 4, FALSE)
=XLOOKUP(G2, A2:A6, D2:D6)
两者都返回 $59.00。VLOOKUP 搜索 A2:D6 的第一列并返回第 4 列;FALSE 强制精确匹配。XLOOKUP 搜索 A2:A6,并从 D2:D6 中返回对应的单元格,默认就是精确匹配。

如果要把公式向下复制整列,请用绝对引用锁定表格,例如 =XLOOKUP(G2, $A$2:$A$6, $D$2:$D$6)。当光标位于引用中时,在 Windows 上按 F4、在 Mac 上按 Cmd+T 即可添加 $ 符号。
VLOOKUP 的两个经典陷阱
1. 忘记写 FALSE(或 0)
VLOOKUP 的最后一个参数是可选的,省略时 Excel 会使用 近似匹配。使用近似匹配时,VLOOKUP 会假定第一列已经排好序,并在没有任何提示的情况下返回小于或等于你搜索值的最接近的值。
在上面的表格上试试 =VLOOKUP("P-110", A2:D6, 4)。P-110 并不存在,但你得到的不是 #N/A,而是 $32.75,也就是 P-105 的价格,因为“P-105”是最接近的较小值。在未排序的数据上,结果可能更加随机。
精确匹配的 VLOOKUP 请始终以 FALSE 或 0 结尾。XLOOKUP 避免了这个问题,因为除非你另行指定,它就使用精确匹配。
2. 写死的列序号
VLOOKUP 公式中的 4 只是一个数字。如果有人在 Product 和 Category 之间插入了一个 Supplier 列,表格就变成了 A:E,Price 移到了 E 列,而公式仍然返回第 4 列,也就是现在的 Category。你会看到“Video”,而不是 $59.00。
XLOOKUP 直接指向价格列本身(D2:D6),所以 Excel 会自动把它更新为 E2:E6,答案依然正确。
XLOOKUP 能做而 VLOOKUP 做不到的事
向左查找
VLOOKUP 只能返回查找列右侧的列。XLOOKUP 不在乎方向。要根据 G2 中的产品名称查找产品 ID:
=XLOOKUP(G2, B2:B6, A2:A6)
当 G2 为“Desk Lamp”时,这个公式返回 P-105,尽管 A 列在 B 列的左边。

找不到时显示友好的提示
=XLOOKUP(G2, A2:A6, D2:D6, "Not found")
VLOOKUP 的等价写法需要再套一层:=IFNA(VLOOKUP(G2, A2:D6, 4, FALSE), "Not found")。
用一个公式返回多列
=XLOOKUP(G2, A2:A6, B2:D6)
对于 P-104,这会把 Webcam HD、Video 和 $59.00 溢出到并排的三个单元格中。请让这些单元格保持为空,否则会出现 #SPILL! 错误。
查找最后一个匹配项,而不是第一个
在同一个客户多次出现的日志中,把 search_mode 设为 -1,即可从下往上搜索,得到最新的记录:
=XLOOKUP(G2, A2:A500, C2:C500, "Not found", 0, -1)
无需排序的近似匹配
对于阶梯价格或佣金比例,VLOOKUP 的近似匹配只有在第一列按升序排序时才有效。XLOOKUP 的 match_mode -1(精确匹配,或取下一个较小的项)和 1(精确匹配,或取下一个较大的项)则不需要排序。假设最低订单金额在 J2:J5,折扣在 K2:K5:
=VLOOKUP(B2, J2:K5, 2, TRUE)
=XLOOKUP(B2, J2:J5, K2:K5, , -1)
通配符
两者都支持 * 和 ?,但 XLOOKUP 需要 match_mode 2 才会把它们当作通配符:
=VLOOKUP("Desk*", B2:D6, 3, FALSE)
=XLOOKUP("Desk*", B2:B6, D2:D6, , 2)
对于 Desk Lamp,两者都返回 $32.75。
INDEX/MATCH:经典的替代方案
在有 XLOOKUP 之前,解决 VLOOKUP 局限性的标准方法是 INDEX 配合 MATCH。它可以向左查找,插入列后依然正确,并且在所有版本的 Excel 中都能使用,因此是必须能在 Excel 2019 或更早版本中打开的文件的最佳选择:
=INDEX(D2:D6, MATCH(G2, A2:A6, 0))
=INDEX(A2:A6, MATCH(G2, B2:B6, 0))
第一个公式返回 G2 中 ID 对应的价格;第二个是向左查找的示例。MATCH 中的 0 表示精确匹配,和 VLOOKUP 的 FALSE 一样,很容易被忘掉。XLOOKUP 其实就是同一思路更简短、更安全的版本。
如何把 VLOOKUP 公式转换为 XLOOKUP
没有内置的转换工具,但转换过程是机械的:
- 找出你的 VLOOKUP:按
Ctrl+F(Mac 上为Cmd+F),输入 VLOOKUP,如果额外设置被隐藏则点击 选项,将 查找范围 设为 公式,然后点击 查找全部。 - 第一个参数(查找值)保持不变。
- 把表格替换为它的 第一列,作为
lookup_array。 - 把列序号替换为 对应的列,作为
return_array。从 A 列开始的表格中的第 5 列就是 E 列。 - 去掉
FALSE。如果原公式以TRUE结尾或没有最后一个参数,请添加match_mode-1,以保持“取下一个较小值”的行为。
例如:
=VLOOKUP(A2, Products!$A$2:$F$500, 5, FALSE)
=XLOOKUP(A2, Products!$A$2:$A$500, Products!$E$2:$E$500)
在转换整张工作表之前,请先对照旧公式测试几个结果。在未排序数据上使用近似匹配的 VLOOKUP 可能一直在返回错误的值,所以 XLOOKUP 的答案出现差异是正常的。
XLOOKUP 文件在 Excel 2016 或 2019 中打开会怎样
工作簿可以打开,但这些版本不认识这个函数。它在编辑栏中显示为 =_xlfn.XLOOKUP(...)。单元格起初可能仍显示上次保存的结果,但公式一旦重新计算,就会返回 #NAME?。
如果你需要与使用旧版本的人共享文件:
- 改用 INDEX/MATCH 或 VLOOKUP,或者
- 发送一份把结果粘贴为数值的副本(复制 → 选择性粘贴 → 数值)。
这同样适用于 FILTER、UNIQUE 和 XMATCH 等其他较新的函数。
Google 表格中的 XLOOKUP
Google 表格(Google Sheets)也有 XLOOKUP,参数顺序相同:=XLOOKUP(search_key, lookup_range, result_range, [missing_value], [match_mode], [search_mode])。本文中的公式在那里原样可用,所以对于要在 Excel 和 Sheets 之间流转的文件,XLOOKUP 是安全的选择。
为什么你的查找返回 #N/A 或错误的值
- 多余的空格。 带尾部空格的“P-104 ”与“P-104”不匹配。请用
TRIM清理数据。 - 以文本形式存储的数字。 以文本形式输入的 ID 无法与以数字形式存储的同一个 ID 匹配。请留意单元格角上的绿色三角,并把整列转换为同一种类型。
- VLOOKUP 中缺少 FALSE。 你会得到一个看似合理但错误的答案,而不是
#N/A。 - 复制公式时区域发生了移动。 请对查找表使用
$绝对引用。 - VLOOKUP 返回
#REF!。 列序号大于表格的列数。 - XLOOKUP 返回
#VALUE!。 查找区域和返回区域的大小不同,例如 A2:A6 和 D2:D60。 #NAME?函数名拼写错误,或者文件是在不含 XLOOKUP 的版本中打开的。
常见问题
XLOOKUP 比 VLOOKUP 好吗? 是的,几乎在所有用途上都是如此。它默认精确匹配,可以向任意方向查找,列移动时不会出错,处理缺失值时也不需要再套公式。VLOOKUP 唯一真正的优势是它在所有版本的 Excel 中都能使用。
XLOOKUP 比 VLOOKUP 快吗? 在日常工作簿中你不会注意到差别。在非常大的已排序列表上,XLOOKUP 的二分查找模式(search_mode 为 2 或 -2)可以加快速度,但如果数据没有排序,就会返回错误的结果。
为什么 XLOOKUP 在我的电脑上显示 #NAME? 你的 Excel 版本不包含 XLOOKUP。它存在于 Microsoft 365、Excel 2021 及更高版本以及网页版 Excel 中,但不在 Excel 2019 或 2016 中。请改用 INDEX/MATCH。
XLOOKUP 也能取代 HLOOKUP 吗? 可以。如果查找区域和返回区域是行而不是列,XLOOKUP 会用相同的语法进行横向搜索。
XLOOKUP 能返回所有匹配项,而不只是第一个吗? 不能,它只返回一个匹配项(或一行多列)。要获取所有匹配的行,请使用 FILTER,例如 =FILTER(A2:D6, C2:C6="Office")。
我还需要学习 VLOOKUP 吗? 值得认识它,因为你会在较旧的工作簿和模板中遇到它。编写新公式时请学习 XLOOKUP,并记住 INDEX/MATCH,用于必须在旧版 Excel 中打开的文件。
让 AI 帮你写查找公式
查找公式是小细节(比如漏写的 FALSE 或移位的区域)最容易造成隐性错误的地方。CoreGPT for Excel 让你描述自己的需求,比如“查找 G2 中产品 ID 对应的价格”或“把每一行标记为高于或低于目标”,然后把公式写入你的工作表,并附上简短的说明。可免费开始使用,支持 Windows、Mac 和网页版 Excel。
使用这个公式并向下填充:
=IF(C2>=D2,"高于","低于")立即试用:CoreGPT for Excel
相关阅读:



