Menu

VLOOKUP 和 XLOOKUP 的区别:该用哪个

VLOOKUP 能做的 XLOOKUP 都能做,而且默认精确匹配、不用列号、能向左查找,还有“未找到”参数。当文件必须在 Excel 2019 或更早版本中打开时,仍然要用 VLOOKUP。

本页的每张表格都是实时的:修改数字或公式,就会重新计算。

VLOOKUP 能做的 XLOOKUP 都能做,而且更不容易出错:它默认精确匹配,用区域而不是数字来指定返回列,能向左查找,还有自己的“未找到”参数。当文件必须在 Excel 2019 或更早版本中使用时,请用 VLOOKUP,因为那些版本没有 XLOOKUP。下面的表格用两种方式完成同一个查找。

同一个查找,两个函数
G2
ABCDEFG
1ProductCategoryPriceStockLook forPear
2AppleFruit$1.2040VLOOKUP$1.50
3PearFruit$1.5025XLOOKUP$1.50
4CarrotVegetable$0.8060
5BreadBakery$2.4015
6MilkDairy$1.1030
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

两个公式都返回 $1.50。分别单击这两个公式:VLOOKUP 框出整个表格 A2:D6,并在其中数到第 3 列;XLOOKUP 只框出它查找的列和它返回的列。

VLOOKUP 与 XLOOKUP 对比

VLOOKUPXLOOKUP
Excel 版本所有版本Excel 2021、2024、Microsoft 365、网页版
默认匹配方式近似匹配(省略第 4 个参数时)精确匹配
返回列在表格中数出来的列号一个区域
在表格中间插入一列返回错误的列仍然正常
向左查找不能能
找不到值#N/A,需要用 IFNA 包起来第 4 个参数,"Not found"
最后一个匹配项不能search_mode 为 -1
一次返回多列每个公式一列(Microsoft 365 中可以用 {2,3} 作列号)返回区域包含多列时会全部溢出
近似匹配下一个较小值,数据必须排序下一个较小值或下一个较大值,顺序不限
通配符使用 FALSE 时可用只在 match_mode 为 2 时可用
横向查找需要用 HLOOKUP同一个函数

两者都不区分大小写。精确匹配时,两者都返回从上往下的第一个匹配项,除非让 XLOOKUP 从下往上查找。

找不到值:IFNA 与第四个参数

一个不在列表中的产品
G2
ABCDEFG
1ProductCategoryPriceStockLook forKiwi
2AppleFruit$1.2040VLOOKUP#N/A
3PearFruit$1.5025with IFNANot found
4CarrotVegetable$0.8060XLOOKUPNot found
5BreadBakery$2.4015
6MilkDairy$1.1030
#N/A 要查找的值不在查找范围内。

单独的 VLOOKUP 显示 #N/A。VLOOKUP 需要用 IFNA 包起来才能显示文本,而 XLOOKUP 用第四个参数就能做到。在 G1 中输入 Milk,三个公式的结果都是 $1.10。

向左查找与移动列

VLOOKUP 的两个结构性限制都来自列号。它只能从查找的列往右数,而且表格变化时这个数字不会跟着变:在 Category 和 Price 之间插入一列,=VLOOKUP(G1,A2:D6,3,FALSE) 仍然返回第 3 列,而那已经是新插入的列了。XLOOKUP 用区域来引用返回列,所以 Excel 会像调整其他引用一样调整它,查找列也可以在任何位置。

根据价格查找产品(向左查找)
G2
ABCDEFG
1ProductCategoryPriceStockPrice$0.80
2AppleFruit$1.2040XLOOKUPCarrot
3PearFruit$1.5025INDEX MATCHCarrot
4CarrotVegetable$0.8060
5BreadBakery$2.4015
6MilkDairy$1.1030
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

两个公式都返回 Carrot。这里没有 VLOOKUP 的写法:产品名在价格的左边。在旧版 Excel 中,答案是 G3 中的 INDEX MATCH,它在插入列后也不会出错。INDEX 和 MATCH 一文对此有详细讲解。

近似匹配的两种写法

对于分段查找,VLOOKUP 使用 TRUE,并要求第一列按升序排序。XLOOKUP 使用 match_mode -1,不需要排序;match_mode 1 则返回下一个较大值,这是 VLOOKUP 做不到的。

按销售额确定提成比例
E2
ABCDE
1Sales fromRateSales4,200
200%VLOOKUP3%
310003%XLOOKUP3%
450005%
5100008%
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

销售额为 4,200 时,两个公式都返回 3%。把 E1 改成 10000,两个公式都返回 8%。

什么时候继续用 VLOOKUP

  • 文件要与使用 Excel 2019、2016 或更早版本的人共享。 在那些版本中 XLOOKUP 会显示 #NAME?。另一个在所有版本中都能用的选择是 INDEX MATCH。
  • 工作簿中已经有几百个能正常工作的 VLOOKUP。 全部改写收益不大;新公式用 XLOOKUP 就好。

速度不是选择其中一个的理由。在普通表格中两者都是瞬间完成,在非常大的已排序列表中,XLOOKUP 的二分查找(search_mode 为 2)和使用 TRUE 的 VLOOKUP 都很快。

Google Sheets 支持这两个函数,参数也相同。

练习:改写一个 VLOOKUP

从 VLOOKUP 改成 XLOOKUP
G2
ABCDEFG
1ProductCategoryPriceStockLook forBread
2AppleFruit$1.2040Stock
3PearFruit$1.5025
4CarrotVegetable$0.8060
5BreadBakery$2.4015
6MilkDairy$1.1030
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

轮到你了: =VLOOKUP(G1,A2:D6,4,FALSE) 返回 G1 中产品的库存。在 G2 中用 XLOOKUP 写出同样的查找。

常见问题

XLOOKUP 比 VLOOKUP 好吗?

在 Excel 2021 或 Microsoft 365 中做新表格的话,是的:它默认精确匹配,没有一移动列就出错的列号,能向左查找,还内置了未找到时显示的文本。只有当文件必须在 Excel 2019 或更早版本中使用时,VLOOKUP 才更合适,因为在那些版本中 XLOOKUP 会显示 #NAME?。

XLOOKUP 比 VLOOKUP 快吗?

在普通表格中你察觉不到差别,两者查找几千行都是瞬间完成。在非常大的已排序数据中,XLOOKUP 的二分查找模式(search_mode 为 2)比线性查找更快,而使用 TRUE 的 VLOOKUP 也是二分查找。

XLOOKUP 和 INDEX MATCH 有什么区别?

它们能完成同样的查找。XLOOKUP 是一个函数,参数更简单,还有“未找到”参数;INDEX MATCH 在所有 Excel 版本中都能用。=XLOOKUP(F2,A2:A6,C2:C6) 和 =INDEX(C2:C6,MATCH(F2,A2:A6,0)) 返回相同的值。

怎么把 VLOOKUP 改写成 XLOOKUP?

保留查找值,把表格拆成第一列和要返回的那一列,去掉列号和 FALSE:=VLOOKUP(F2,A2:D6,3,FALSE) 变成 =XLOOKUP(F2,A2:A6,C2:C6)。

Coddy 编程语言插图

和 Coddy 一起学编程

开始