INDEX MATCH 函数:语法、示例与错误排查
更新于 2026-10-12 · 免费 · 兼容 Excel 与 Google Sheets
语法
=INDEX(返回数组, MATCH(查找值, 查找数组, 0))快速答案
INDEX 与 MATCH 搭配:在一列中找到值的位置,再从任意其他列返回同一行的内容——包括左边的列:=INDEX($E$2:$E$500, MATCH(A2, $D$2:$D$500, 0))。这对组合在所有 Excel 版本和 Google Sheets 里都能用。#N/A 说明值不存在、被存成了文本型数字,或带着不可见空格。
语法
=INDEX(返回数组, MATCH(查找值, 查找数组, 0))| 参数 | 属于 | 含义 |
|---|---|---|
| 返回数组 | INDEX | 要返回内容的那一列。可以位于查找列的左边——这是相对 VLOOKUP 的主要优势。 |
| 查找值 | MATCH | 要查找的值:数字、文本、日期或单元格引用(如 A2)。 |
| 查找数组 | MATCH | 在其中查找的那一列。只能一列——MATCH 返回的是位置,不是值。 |
| 0 | MATCH | 0 = 精确匹配。务必每次都写:省略后 MATCH 走近似匹配,在未排序数据上会悄悄返回错误结果。 |
根据区域设置不同,参数可能用分号而不是逗号分隔:=INDEX($E$2:$E$500; MATCH(A2; $D$2:$D$500; 0))。在小数点用逗号的地区这是标准写法。
基本示例
=INDEX($E$2:$E$500, MATCH(A2, $D$2:$D$500, 0))日常套路:MATCH 在 D 列里找到 A2 的位置,INDEX 返回 E 列同一位置的值。读作「A2 在 D 列的第几行,就取 E 列的第几行」。
=INDEX($D$2:$D$500, MATCH(A2, $E$2:$E$500, 0))左向查找:返回列在查找列的左边。这是 VLOOKUP 完全做不到的场景,也是 INDEX/MATCH 成为高手标配的原因。
=INDEX($B$2:$E$50, MATCH(A2, $A$2:$A$50, 0), MATCH(C1, $B$1:$E$1, 0))两向查找:第一个 MATCH 找行、第二个 MATCH 找列,INDEX 返回两者交叉处的单元格——不需要任何辅助单元格的动态交叉引用表。
INDEX 区域和 MATCH 区域的行数必须完全一致。如果 MATCH 扫描 D2:D500 而 INDEX 只覆盖 E2:E300,匹配到 301-500 行时就会报 #REF!。
常见错误与修复方法
| 错误 | 最常见原因 | 修复 |
|---|---|---|
| #N/A | 值不在查找列里——或者只是看起来一样(文本型数字、尾部或不断行空格)。 | 单独运行 =MATCH(A2, D2:D500, 0) 看是哪一半出问题;用 VALUE() 转换文本型数字、清理不可见空格,或给整个公式套上 IFERROR。 |
| #REF! | INDEX 区域比 MATCH 区域短,找到的位置超出了它的范围。 | 两个区域高度必须完全一致,例如 D2:D500 配 E2:E500。 |
| #NAME? | INDEX 或 MATCH 拼写错误——少一个字母或多一个空格就够了。 | 输入 =INDEX( 和 =MATCH(,让自动补全帮你写完函数名。 |
| #VALUE! | MATCH 参数写反:区域在前、值在后。 | 顺序是 MATCH(值, 区域, 0)——先写要找的值,再写要搜索的列。 |
从网页复制来的尾部空格和不断行空格同样是这里最隐蔽的 #N/A 原因:对 MATCH 来说,"NYC " 和 "NYC" 是两个不同的字符串。查找前先一键清理整列。
INDEX MATCH 与 VLOOKUP 对比
| INDEX MATCH | VLOOKUP | |
|---|---|---|
| 可用版本 | 所有 Excel 版本(Google Sheets 也有) | 所有 Excel 版本(Google Sheets 也有) |
| 向键列左边查找 | 可以 | 不行 |
| 插入列后是否失效 | 不失效——区域指向独立的列 | 会失效——固定的列序号可能漂移 |
| 精确匹配 | 在 MATCH 里写 0 | 必须手动加 FALSE(默认是近似匹配!) |
| 多列返回 | 不行——一条公式一个值 | 不行——一条公式一个值 |
| 两向查找 | 可以——INDEX + MATCH + MATCH | 不行 |
在共享工作簿里优先用 INDEX MATCH 而不是 VLOOKUP:它能向左查找、插入列也不会断。在 Microsoft 365 上,XLOOKUP 把这些优势打包进了单个函数——行为相同,只需记住一个名字。
Google Sheets 中的 INDEX MATCH
Google Sheets 完整支持 INDEX 和 MATCH,参数与 Excel 相同,上面的公式可以原样粘贴。它依然是跨表格软件兼容性最好的查找写法。
- 结尾的 0(精确匹配)在 Sheets 里同样关键——省略后会悄悄切换成近似匹配。
- 在小数点用逗号的区域设置下(欧洲和拉美大部分地区),参数之间用分号:=INDEX($E$2:$E$500; MATCH(A2; $D$2:$D$500; 0))。Excel 同理。
- Google Sheets 也提供与 Excel 2021+ 相同规则的 XLOOKUP;而 INDEX/MATCH 是在所有旧文件里都能正常打开的版本。
- 两向查找 INDEX/MATCH/MATCH 在两边表现一致——适合矩阵式的价格表、汇率表。
限制与进阶技巧
- 分段调试:先单独运行 MATCH。返回数字说明问题在 INDEX;返回 #N/A 说明问题在查找列。
- 永远不要省略 MATCH 的 0——未排序数据上的近似匹配会返回看似合理却错误的结果,这是最危险的错误类型。
- 双击填充柄(选区角落的小方块)可以一口气把公式复制到最后一行。
- 用 $ 锁定区域($D$2:$D$500),复制公式时查找列才不会左右滑动。
- 两向查找时,把 MATCH 嵌套进 MATCH 作为 INDEX 的列参数——替代矩阵式交叉表。
需要从另一个文件拉取很多列而不只是一个值?那不是查找,是表格连接:下面的免费工具无需公式即可完成。
相关工具
相关函数
常见问题
INDEX MATCH 在 Excel 里是干什么的?
MATCH 在一列里找到值的位置,INDEX 返回另一列中同一位置的值——两个方向都行,加上 0 就是精确匹配。它是完成 VLOOKUP 做不到的查找的经典组合,比如向左查找。
为什么 INDEX MATCH 返回 #N/A?
值不在查找列里——或者只是看起来一样:数字被存成了文本,或带着不可见的尾部空格、不断行空格。先单独运行 MATCH 部分看哪一半出问题,再用 VALUE() 转换文本型数字或清理空格。
INDEX MATCH 怎么向左查找?
把返回列放在 INDEX 的第一个参数,用 MATCH 在任意列搜索:=INDEX($D$2:$D$500, MATCH(A2, $E$2:$E$500, 0)) 通过搜索 E 列返回 D 列的值。VLOOKUP 完全做不到这一点。
为什么 MATCH 里必须写 0?
第三个参数决定匹配类型。0 = 精确匹配。省略时 MATCH 走近似匹配,它假定数据已排序,会悄悄返回错误的行——这是 INDEX MATCH 最危险的错误,因为表面上什么都没坏。
INDEX MATCH 比 VLOOKUP 好吗?
对共享文件来说是的:它能向左查找、不怕插列、还能做两向查找。VLOOKUP 对新手更易读。在 Microsoft 365 上,XLOOKUP 用单个函数就给了你 INDEX MATCH 的全部优势。
INDEX MATCH 能一次返回多列吗?
不能——一条 INDEX MATCH 公式只返回一个值,所以每列要写一条公式(或横向拖动)。要一次拉取多列,XLOOKUP 的多列返回区域或表格连接工具更合适。
INDEX MATCH は Google Sheets で使えますか?
使えます——Sheets は両方の関数を Excel と同じ引数でサポートしており、完全一致のための末尾の 0 も同じです。変わるのは引数の区切りだけです。小数点にカンマを使う地域設定ではセミコロンを使います。
准备好处理你自己的文件了吗?
打开在线关联两个 Excel 表格(按键 Join) — 免费