Excel INDEX MATCH 查表
MATCH 找出某个值在清单里的位置,INDEX 按位置从区域取值。把 MATCH 放进 INDEX 里,就得到一个不在乎数据方向的查表公式——键在右边时,VLOOKUP 给不了这个答案。
INDEX MATCH 的语法
这是把两个函数叠在一起用:MATCH 报告「第几格」,INDEX 返回那个位置上的值。只有组合起来才是一次查找,单看任何一半都不成立。
要取出的值所在的那一列(或那一行),例如 C2:C5。它不必包含键列,在左边或右边都可以。
要查找的值、要搜索的区域(键列)、以及匹配方式。匹配方式必须写 0(精确匹配);省略会变成 1(近似匹配),顺序一乱就返回错的列。
查表示例
键在左侧时,用 INDEX MATCH 取出产品单价。
| 产品代码 | 品名 | 单价 |
|---|---|---|
| SKU-101 | 键盘 | 49.00 |
| SKU-102 | 鼠标 | 19.50 |
| SKU-103 | 显示器 | 24.99 |
| SKU-104 | 扩展坞 | 89.00 |
MATCH 返回 3(SKU-103 在 A2:A5 的第 3 行),INDEX 再取 C2:C5 的第 3 格,得到 24.99。返回区域一次指明,单价在左边还是右边都不影响结果。
同时用行与列定位(二维查找)
要同时用行标题与列标题定位时,放两个 MATCH:第一个找行,第二个找列。
| 业务员 | Q1 | Q2 | Q3 |
|---|---|---|---|
| 小王 | 120 | 150 | 180 |
| 小李 | 90 | 110 | 140 |
| 小陈 | 200 | 180 | 210 |
行的 MATCH 返回 2(小李)、列的 MATCH 返回 3(Q3),于是取 B2:D4 的第 2 行第 3 列,得到 140。因为行与列分开找,把表换个顺序也不会坏。
与 VLOOKUP 的对比
同一个查找用 VLOOKUP 写,要指定「从键列往右数第几列」。差别就在这里——也是插入列时会不会出事的关键。
| 维度 | VLOOKUP | INDEX MATCH |
|---|---|---|
| 查找方向 | 只能往键的右侧 | 左右皆可 |
| 插入列 | 列号跟着偏移,悄悄算错 | 指明区域,不受影响 |
| 返回列的写法 | 从键列数起的列号 | 直接指明返回区域 |
| 可读性 | 短 | 较长,但意图明确 |
| 旧版 Excel | 可用 | 可用(XLOOKUP 不可用) |
列多、或这张表还有人持续加列时,INDEX MATCH 更安全。列少、只查一次,VLOOKUP 的短就是优点。若环境支持 XLOOKUP,能一个式子同时写返回值与找不到时的默认值,XLOOKUP 最短。
INDEX MATCH 最常踩的 4 个陷阱
1. 忘了写 MATCH 的匹配方式
只写 MATCH(要查找的值, 区域) 时,匹配方式是 1(近似匹配),区域没有升序排列就会返回不相干的行。永远把 0 写上。
2. INDEX 与 MATCH 的区域行数不一致
INDEX 用 C2:C5 却在 A2:A6 里找,位置就会整体偏移一格。两个区域要同行数、同起始行;若想用整张表,就把 INDEX 的行号补上偏移。
3. 要查找的值与键的类型不同
一边是文本 "103"、另一边是数字 103,就对不上。这是导入 CSV 之后最常见的症状,先统一一边的类型(VALUE 或 TEXT)再查。
4. 数组多条件只按 Enter
MATCH(1, (A2:A6="北区")*(B2:B6="Q3"), 0) 会产生数组。旧版 Excel 必须按 Ctrl+Shift+Enter,只按 Enter 会得到 #N/A 或 1。
Excel 与 Google Sheets
Microsoft Excel (365 / Desktop)
Excel 的 INDEX 有 3 个参数(区域、行、列),MATCH 也有 3 个(要查找的值、区域、匹配方式)。Excel 365 的数组多条件可直接按 Enter。INDEX 省略行或列时,会返回整列或整行。
Google Sheets
Google Sheets 语法相同,区域写法也是 A2:A5,因此 Excel 写好的公式几乎可以原样贴过去。
INDEX MATCH 练习
用 INDEX 与 MATCH 从键的左侧或部分文本取出值。公式要随每一行变化,不能写死。
常见问题
INDEX MATCH 和 VLOOKUP 差在哪里?
VLOOKUP 只能往键的右侧取值,而且公式里存的是列号,插入一列就会悄悄算错。INDEX MATCH 直接指明返回区域、另外找位置,所以左右都能查,插入列也不会坏。
有 XLOOKUP 了还需要学 INDEX MATCH 吗?
需要。Excel 2019 及更早版本没有 XLOOKUP,与同事共用文件、或在 Google Sheets 协作时也常遇到。面试仍会问,财务模板也大量使用这个写法。
INDEX MATCH 怎么做多条件查询?
可以拼接键(=INDEX(C2:C6, MATCH(A2&B2, D2:D6&E2:E6, 0))),或用数组写法 =INDEX(C2:C6, MATCH(1, (A2:A6="北区")*(B2:B6="Q3"), 0))。旧版 Excel 的数组写法要按 Ctrl+Shift+Enter,Excel 365 与 Sheets 不用。