=MATCH(E2,A2:A6,0) 返回 E2 中的值在 A2:A6 中的位置:第一个单元格是 1,第二个是 2,依此类推。0 表示要求精确匹配。MATCH 返回的是数字而不是值本身,所以它通常和 INDEX 搭配使用。
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Product | Category | Price | Look for | Position | |
| 2 | Apple | Fruit | $1.20 | Bread | 4 | |
| 3 | Pear | Fruit | $1.50 | |||
| 4 | Carrot | Vegetable | $0.80 | |||
| 5 | Bread | Bakery | $2.40 | |||
| 6 | Milk | Dairy | $1.10 |
Bread 是 A2:A6 中的第四个单元格,所以 F2 显示 4。计数从区域的第一个单元格开始,而不是从工作表的第 1 行开始:把区域改成 A1:A6,答案就变成 5。在 E2 中输入 Kiwi,MATCH 会返回 #N/A。
MATCH 语法和匹配类型
=MATCH(lookup_value, lookup_array, [match_type])
| match_type | 查找的内容 | 列表要求 |
|---|---|---|
0 | 第一个与 lookup_value 完全相等的值。文本可以使用通配符。 | 顺序不限 |
1 或省略 | 小于或等于 lookup_value 的最大值。 | 按升序排列 |
-1 | 大于或等于 lookup_value 的最小值。 | 按降序排列 |
默认值是 1,不是 0。在未排序的姓名列表上使用省略了第三个参数的 MATCH,它不会报错,而是返回一个可能属于另一行的位置。查找文本、编码或 ID 时,每次都要写上 0。
近似匹配:值落在哪个区间
匹配类型为 1 时,MATCH 回答的是“在哪个区间”:返回该值已达到的最后一个门槛的位置。这里 75 分已经超过了 0、60 和 70,所以落在第 3 个区间,等级为 C。
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Min score | Grade | Score | Band | Grade | |
| 2 | 0 | F | 75 | 3 | C | |
| 3 | 60 | D | 59 | 1 | F | |
| 4 | 70 | C | 90 | 5 | A | |
| 5 | 80 | B | 100 | 5 | A | |
| 6 | 90 | A |
59 仍低于 60,所以落在第 1 个区间(F)。90 与最后一个门槛完全相等,100 高于它,所以两者都落在第 5 个区间(A)。门槛必须保持升序排列:正是这一点让 MATCH 能停在正确的位置。
匹配类型 -1 与之相反,用于从大到小排序的列表。它返回仍大于或等于查找值的最小值的位置:某一列中的尺寸为 {50;25;12;5} 时,=MATCH(18,D2:D5,-1) 返回 2,即 25 这个尺寸,它是能装下 18 的最小尺寸。
通配符和大小写
MATCH 不区分大小写,匹配类型为 0 时可以使用通配符 *(任意多个字符)和 ?(恰好一个字符)。要区分大小写,就用 EXACT 比较整个列表,再查找第一个 TRUE。
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Product | Category | Price | Starts with "C" | 3 |
| 2 | Apple | Fruit | $1.20 | Lower case "milk" | 5 |
| 3 | Pear | Fruit | $1.50 | Exactly "milk" | #N/A |
| 4 | Carrot | Vegetable | $0.80 | ||
| 5 | Bread | Bakery | $2.40 | ||
| 6 | Milk | Dairy | $1.10 |
"C*" 匹配 Carrot,位置为 3。"milk" 在位置 5 找到 Milk,因为大小写被忽略了。EXACT 写法逐个区分大小写地把名称与“milk”比较,找不到 TRUE,于是返回 #N/A。把 A6 改成 milk,它就返回 5。在 Excel 2019 及更早版本中,EXACT 公式要按 Ctrl+Shift+Enter(Mac 上按 Cmd+Shift+Enter)确认;在 Excel 2021 和 Microsoft 365 中按 Enter 就够了。波浪号可以让通配符按字面匹配:"~*" 查找的是真正的星号。
检查值是否在列表中
MATCH 找到值时返回数字,找不到时返回 #N/A。ISNUMBER 把它变成 TRUE 或 FALSE,这就是一个快速的“是否在列表中”的判断。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Ordered | In stock? | In stock | |
| 2 | Pear | Yes | Apple | |
| 3 | Kiwi | No | Pear | |
| 4 | Milk | Yes | Bread | |
| 5 | Plum | No | Milk | |
| 6 | Bread | Yes |
Pear、Milk 和 Bread 在 D2:D5 中,所以显示 Yes。Kiwi 和 Plum 显示 No。COUNTIF($D$2:$D$5,A2)>0 给出同样的答案;MATCH 找到第一个就停止,COUNTIF 则会全部数一遍。
MATCH、XMATCH 和 INDEX
MATCH 是经典查找公式 =INDEX(C2:C6,MATCH(E2,A2:A6,0)) 的一半,详见 INDEX 和 MATCH 页面。Excel 2021 和 Microsoft 365 新增了 XMATCH,它默认精确匹配,可以从最后一项往前查找,不用降序排序也能处理“下一个更大值”。MATCH 仍然到处都能用,包括必须在 Excel 2019 中打开的文件。
练习:员工的位置
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Name | Team | Start year | Name | Position | |
| 2 | Ana | Sales | 2019 | Dev | ||
| 3 | Ben | Support | 2021 | |||
| 4 | Cara | Sales | 2018 | |||
| 5 | Dev | Finance | 2022 | |||
| 6 | Eli | Support | 2020 | |||
| 7 | Fay | Finance | 2023 |
轮到你了: 在 F2 中返回 E2 中的姓名在 A 列列表中的位置。
常见问题
Excel 中的 MATCH 返回什么?
返回位置而不是值:当 Bread 是 A2:A6 中的第四个单元格时,=MATCH("Bread",A2:A6,0) 返回 4。把它和 INDEX 搭配,就能从另一列取出该位置上的值。
匹配类型 0、1 和 -1 有什么区别?
0 查找精确匹配,列表顺序不限。1(默认值)查找小于或等于查找值的最大值,要求列表按升序排列。-1 查找大于或等于查找值的最小值,要求列表按降序排列。
MATCH 区分大小写吗?
不区分。=MATCH("milk",A2:A6,0) 能找到 Milk。要区分大小写,用 =MATCH(TRUE,EXACT(A2:A6,"milk"),0),在 Excel 2019 及更早版本中需要按 Ctrl+Shift+Enter(Mac 上按 Cmd+Shift+Enter)。
怎样用 MATCH 检查一个值是否在列表中?
值不存在时 MATCH 返回 #N/A,所以判断它是否返回了数字即可:=ISNUMBER(MATCH(A2,$D$2:$D$5,0)) 给出 TRUE 或 FALSE。再用 IF 包住它,就能显示你自己的文本。