Menu

Excel XMATCH 函数:查找位置、最后匹配与下一个较大值

=XMATCH(E2,A2:A6) 返回 E2 在 A2:A6 中的位置,默认精确匹配。它还能在不排序的情况下查找下一个较小值或较大值,从底部开始查找,以及使用通配符。

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

=XMATCH(E2,A2:A6) 返回 E2 在 A2:A6 中的位置:第一个单元格为 1,第二个为 2。和 MATCH 不同,除非另行指定,它使用精确匹配。XMATCH 需要 Excel 2021 或 Microsoft 365;在更早的版本中请使用 MATCH(E2,A2:A6,0)。

商品的位置
F2
ABCDEF
1ProductCategoryPriceLook forPosition
2AppleFruit$1.20Carrot3
3PearFruit$1.50
4CarrotVegetable$0.80
5BreadBakery$2.40
6MilkDairy$1.10
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

Carrot 是第三项,所以 F2 显示 3。输入 Kiwi,它会返回 #N/A。和 Excel 的所有查找一样,它不区分大小写。

XMATCH 语法

=XMATCH(lookup_value, lookup_array, [match_mode], [search_mode])
参数取值
match_mode0 精确匹配(默认),-1 精确匹配或下一个较小值,1 精确匹配或下一个较大值,2 通配符匹配
search_mode1 从第一项开始(默认),-1 从最后一项开始,2 升序二分查找,-2 降序二分查找

二分查找模式在很大的已排序列表上更快,在未排序的列表上则会返回错误的位置。其他模式适用于任意顺序的数据。

无需排序,查找下一个较小值或较大值

match_mode 为 1 时,查找大于或等于查找值的最小值。即使尺寸没有按顺序排列,它也能回答“放得下的最小箱子”这类问题。用 MATCH 的话,列表需要从大到小排序。

放得下物品的最小箱子
E2
ABCDE
1BoxHolds (liters)Item (liters)18
2S5Position4
3XL50BoxL
4M12
5L25
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

能装下 18 升的尺寸是 25 和 50,较小的是 25,即第四项,箱子 L。把 E1 改成 12 会得到精确匹配(M),改成 40 则得到 XL。match_mode 为 -1 时正好相反:取小于或等于查找值的最大值,这是税率档次和佣金区间的规则。XLOOKUP 也有这两种模式,并且直接返回值。

从最后一项开始查找

search_mode 为 -1 时从底部开始查找,所以 XMATCH 返回最后一个匹配项的位置。位置仍然从区域顶部开始计数。

某个客户的最后一笔订单
F2
ABCDEF
1DateCustomerAmountCustomerBen
22026-03-02Ben120Last position5
32026-03-05Ana80Last date2026-03-20
42026-03-09Ben45First position1
52026-03-12Cara200
62026-03-20Ben60
72026-03-24Ana95
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

Ben 出现在第 1、3、5 个位置。正向查找返回 1,反向查找返回 5,也就是他在 2026-03-20 的订单。在有 XMATCH 之前,找最后一个位置需要用数组技巧:=MATCH(2,1/(B2:B7=F1))。

通配符需要 match_mode 2

match_mode 为 2 时,* 代表任意多个字符,? 代表正好一个字符。在其他模式下它们都是普通字符,而 MATCH 只要 match_type 为 0 就会把它们当作通配符。

按模式查找
D2
ABCD
1ProductPatternPosition
2Green tea*coffee2
3Iced coffee?lack*4
4Coffee beans
5Black tea
6Orange juice
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

*coffee(任何以“coffee”结尾的内容)匹配第 2 个位置的 Iced coffee,?lack* 匹配第 4 个位置的 Black tea。Coffee beans 不匹配 *coffee,因为这个模式的末尾没有 *。不使用 match_mode 2 时,同一个模式会被当作字面文本查找,所以在 Excel 中会返回 #N/A:

=XMATCH("*coffee", A2:A6)        #N/A: no cell is literally "*coffee"
=XMATCH("*coffee", A2:A6, 2)     2

XMATCH 与 MATCH 对比

MATCHXMATCH
省略模式参数时的默认值近似匹配(1),数据必须已排序精确匹配
下一个较小值1,数据按升序排序-1,任意顺序
下一个较大值-1,数据按降序排序1,任意顺序
通配符使用 0 时始终启用仅在 match_mode 为 2 时
最后一个匹配项不支持search_mode -1
版本所有版本Excel 2021 和 Microsoft 365

两者的符号是反的:MATCH 的 -1 查找下一个较大值,而 XMATCH 的 -1 查找下一个较小值。把 MATCH(E2,A2:A6,0) 改写成 XMATCH 时,去掉那个 0;改写近似匹配的 MATCH 时,把符号反过来,排序顺序也就不再重要了。旧函数的用法见 MATCH 页面。

练习:最后一笔订单的位置

订单
F2
ABCDEF
1DateCustomerAmountCustomerBen
22026-03-02Ben120Last position
32026-03-05Ana80
42026-03-09Ben45
52026-03-12Cara200
62026-03-20Ben60
72026-03-24Ana95
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

轮到你了: 在 F2 中返回 F1 中客户最后一笔订单的位置。

常见问题

MATCH 和 XMATCH 有什么区别?

XMATCH 默认精确匹配(MATCH 默认近似匹配),查找下一个较小或较大值时不需要数据已排序,可以从最后一项往上查找,而且只有在你用 match_mode 2 指定时才把 * 和 ? 当作通配符。它需要 Excel 2021 或 Microsoft 365。

怎样用 XMATCH 查找最后一次出现的位置?

把第四个参数 search_mode 设为 -1:=XMATCH("Ben",B2:B7,0,-1) 返回 B2:B7 中最后一个 Ben 的位置。位置仍然从区域顶部开始计数。

XMATCH 找不到匹配项时返回什么?

#N/A,和 MATCH 一样。用 IFNA 包住它就能显示别的内容:=IFNA(XMATCH(E2,A2:A6),"Not in list")。

XMATCH 能代替 INDEX 里的 MATCH 吗?

能。=INDEX(C2:C6,XMATCH(E2,A2:A6)) 的效果和 INDEX 搭配 MATCH(E2,A2:A6,0) 一样,而且不会忘写那个 0。如果文件必须在 Excel 2019 或更早版本中打开,请改用 MATCH。

Coddy 编程语言插图

和 Coddy 一起学编程

开始