=XMATCH(E2,A2:A6) 返回 E2 在 A2:A6 中的位置:第一个单元格为 1,第二个为 2。和 MATCH 不同,除非另行指定,它使用精确匹配。XMATCH 需要 Excel 2021 或 Microsoft 365;在更早的版本中请使用 MATCH(E2,A2:A6,0)。
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Product | Category | Price | Look for | Position | |
| 2 | Apple | Fruit | $1.20 | Carrot | 3 | |
| 3 | Pear | Fruit | $1.50 | |||
| 4 | Carrot | Vegetable | $0.80 | |||
| 5 | Bread | Bakery | $2.40 | |||
| 6 | Milk | Dairy | $1.10 |
Carrot 是第三项,所以 F2 显示 3。输入 Kiwi,它会返回 #N/A。和 Excel 的所有查找一样,它不区分大小写。
XMATCH 语法
=XMATCH(lookup_value, lookup_array, [match_mode], [search_mode])
| 参数 | 取值 |
|---|---|
match_mode | 0 精确匹配(默认),-1 精确匹配或下一个较小值,1 精确匹配或下一个较大值,2 通配符匹配 |
search_mode | 1 从第一项开始(默认),-1 从最后一项开始,2 升序二分查找,-2 降序二分查找 |
二分查找模式在很大的已排序列表上更快,在未排序的列表上则会返回错误的位置。其他模式适用于任意顺序的数据。
无需排序,查找下一个较小值或较大值
match_mode 为 1 时,查找大于或等于查找值的最小值。即使尺寸没有按顺序排列,它也能回答“放得下的最小箱子”这类问题。用 MATCH 的话,列表需要从大到小排序。
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Box | Holds (liters) | Item (liters) | 18 | |
| 2 | S | 5 | Position | 4 | |
| 3 | XL | 50 | Box | L | |
| 4 | M | 12 | |||
| 5 | L | 25 |
能装下 18 升的尺寸是 25 和 50,较小的是 25,即第四项,箱子 L。把 E1 改成 12 会得到精确匹配(M),改成 40 则得到 XL。match_mode 为 -1 时正好相反:取小于或等于查找值的最大值,这是税率档次和佣金区间的规则。XLOOKUP 也有这两种模式,并且直接返回值。
从最后一项开始查找
search_mode 为 -1 时从底部开始查找,所以 XMATCH 返回最后一个匹配项的位置。位置仍然从区域顶部开始计数。
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Date | Customer | Amount | Customer | Ben | |
| 2 | 2026-03-02 | Ben | 120 | Last position | 5 | |
| 3 | 2026-03-05 | Ana | 80 | Last date | 2026-03-20 | |
| 4 | 2026-03-09 | Ben | 45 | First position | 1 | |
| 5 | 2026-03-12 | Cara | 200 | |||
| 6 | 2026-03-20 | Ben | 60 | |||
| 7 | 2026-03-24 | Ana | 95 |
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 就会把它们当作通配符。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Product | Pattern | Position | |
| 2 | Green tea | *coffee | 2 | |
| 3 | Iced coffee | ?lack* | 4 | |
| 4 | Coffee beans | |||
| 5 | Black tea | |||
| 6 | Orange 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 对比
| MATCH | XMATCH | |
|---|---|---|
| 省略模式参数时的默认值 | 近似匹配(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 页面。
练习:最后一笔订单的位置
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Date | Customer | Amount | Customer | Ben | |
| 2 | 2026-03-02 | Ben | 120 | Last position | ||
| 3 | 2026-03-05 | Ana | 80 | |||
| 4 | 2026-03-09 | Ben | 45 | |||
| 5 | 2026-03-12 | Cara | 200 | |||
| 6 | 2026-03-20 | Ben | 60 | |||
| 7 | 2026-03-24 | Ana | 95 |
轮到你了: 在 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。