组合使用 INDEX 和 MATCH
使用 MATCH 将位置传递给 INDEX,实现动态查找
组合使用 INDEX 和 MATCH 是 CoddyKit 上的免费 Excel Formulas Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Excel Formulas Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Excel Formulas Academy 课程共包含 4 节课。
完美搭配
现在,您已经掌握了查找的两个部分。MATCH 查找值所在的位置,而 INDEX 返回某个位置上的值。
将它们组合起来,就能完成一次完整的查找:MATCH 定位行,然后 INDEX 从该行中提取您选择的任意列的数据。
看到这个模式后,您就会发现它很简单:将 MATCH 放在 INDEX内部,也就是通常填写行号的位置。
核心模式
下面是您会反复使用的形式:
=INDEX(return_range, MATCH(lookup_value, lookup_range, 0))
请从内向外阅读。MATCH 先运行并返回一个位置编号。这个数字随后会成为 INDEX 的行号,INDEX 再从返回范围中返回相应的值。
返回范围和查找范围通常包含相同数量的行,因此一个范围中的位置可以与另一个范围中的位置对应起来。
=INDEX(C2:C20, MATCH("Cherry", A2:A20, 0))分步示例
假设有一个表格,A 列存放产品名称,C 列存放价格。您想查找“樱桃”的价格。
首先,MATCH 查找樱桃:=MATCH("Cherry", A2:A20, 0),假设返回 3。
然后,INDEX 使用这个 3:=INDEX(C2:C20, 3) 会返回 C 列第 3 行中的价格。
将它们嵌套起来,就可以一步完成:=INDEX(C2:C20, MATCH("Cherry", A2:A20, 0))。
=INDEX(C2:C20, MATCH("Cherry", A2:A20, 0))使用单元格作为查找值
将“樱桃”直接写入公式对于学习来说没有问题,但实际公式通常会引用单元格。请将搜索词放入 E1,然后引用它。
=INDEX(C2:C20, MATCH(E1, A2:A20, 0))
现在,无论您在 E1 中输入什么产品,公式都会立即返回对应的价格。输入香蕉,就会得到香蕉的价格;输入椰枣,答案也会随之更新。
一个公式就变成了完全由输入单元格驱动的可复用查找工具。
=INDEX(C2:C20, MATCH(E1, A2:A20, 0))向左查找
这正是 INDEX-MATCH 的特别之处。查找列和返回列彼此独立,因此返回的值可以位于您搜索的值的左侧。
假设价格位于 A 列,产品名称位于 C 列。要按名称查找产品价格,请写入 =INDEX(A2:A20, MATCH(E1, C2:C20, 0))。
您搜索的是 C 列,但返回的是 A 列。VLOOKUP 如果没有辅助方式就无法做到这一点。
=INDEX(A2:A20, MATCH(E1, C2:C20, 0))返回不同字段
返回范围决定您得到的内容。使用相同的键进行搜索时,只需更改 INDEX 范围,就可以提取任意列。
查找客户的电子邮件地址:=INDEX(D2:D50, MATCH(E1, A2:A50, 0))。
要改为查找同一客户所在的城市:=INDEX(F2:F50, MATCH(E1, A2:A50, 0))。
MATCH 部分保持不变;只有 INDEX 范围会改变,以选择不同的结果。
=INDEX(F2:F50, MATCH(E1, A2:A50, 0))双向查找预览
您还可以向 INDEX 提供列号,这个列号可通过第二个 MATCH 找到。这样即可定位行与列交叉处的值。
=INDEX(B2:E10, MATCH(G1, A2:A10, 0), MATCH(G2, B1:E1, 0))
第一个 MATCH 根据 A 列中的标签找到行,第二个根据第 1 行中的标题找到列。INDEX 返回两者交叉处的单元格。稍后将深入讲解这种高级模式。
=INDEX(B2:E10, MATCH(G1, A2:A10, 0), MATCH(G2, B1:E1, 0))保持范围对齐
为了让位置保持对应,查找范围和返回范围必须从同一行开始,并且高度相同。
如果 MATCH 搜索 A2:A20(19 行),而 INDEX 从 C2:C19(18 行)返回结果,位置就会错开,您得到的答案也会错误。
一个可靠的习惯是:对两者使用完全相同的行范围,例如 A2:A20 和 C2:C20。A:A 和 C:C 这样的整列引用也会自动保持对齐。
=INDEX(C:C, MATCH(E1, A:A, 0))处理未找到的匹配
如果 MATCH 找不到查找值,就会返回 #N/A,整个 INDEX-MATCH 也会显示该错误。将其包装在 IFNA 中,即可提供简洁的后备结果。
=IFNA(INDEX(C2:C20, MATCH(E1, A2:A20, 0)), "Not found")
现在,找不到产品时会显示文本 "Not found",而不是令人困惑的错误。IFERROR 也可以使用,但 IFNA 只针对未找到的情况,并会让其他错误继续显示。
=IFNA(INDEX(C2:C20, MATCH(E1, A2:A20, 0)), "Not found")完整的实际公式
现在把所有内容组合起来。您有一个员工表:A 列是 ID,B 列是姓名,C 列是部门,D 列是薪资。用户会在 G1 中输入一个 ID。
要返回该员工的部门:=INDEX(C2:C200, MATCH(G1, A2:A200, 0))。
如果要返回薪资,只需将 INDEX 范围改为 D2:D200。查找逻辑始终不变,只有读取数据的列会改变。这是日常动态查找中最常用的工具。
=INDEX(D2:D200, MATCH(G1, A2:A200, 0))为什么从内向外阅读很有帮助
当公式看起来令人望而生畏时,请按照电子表格的计算方式,从最内层函数开始向外计算。
对于 =INDEX(C2:C20, MATCH(E1, A2:A20, 0)):先阅读 MATCH(E1, A2:A20, 0),设想它返回一个类似 5 的数字,然后在脑中将其替换为 =INDEX(C2:C20, 5)。
这样一来,公式突然就变成了“返回第 5 个价格”。养成这个习惯后,任何嵌套查找都很容易调试。
=INDEX(C2:C20, MATCH(E1, A2:A20, 0))快速检查
请确认您理解这两个函数是如何组合的。
回顾:INDEX + MATCH
您将两个函数组合成了灵活的查找公式:
- 模式:
=INDEX(return_range, MATCH(lookup_value, lookup_range, 0)) - MATCH 找到行位置;INDEX 返回该位置的值
- 查找列和返回列彼此独立,因此向左侧查找和向右侧查找一样容易
- 让两个范围保持相同高度,并使用 IFNA 进行简洁的错误处理
接下来,看看这种方法为什么通常优于 VLOOKUP。
=INDEX(C2:C20, MATCH(E1, A2:A20, 0))常见问题解答
「组合使用 INDEX 和 MATCH」课时是免费的吗?
是的 — 「组合使用 INDEX 和 MATCH」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Excel Formulas Academy 课程的其余内容,请升级到 CoddyKit PRO。 Excel Formulas Academy 课程共包含 4 节课。
「组合使用 INDEX 和 MATCH」这节课中我会学到什么?
使用 MATCH 将位置传递给 INDEX,实现动态查找 你通过在浏览器中直接运行的动手代码来练习 Excel Formulas Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Excel Formulas Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Excel Formulas Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「组合使用 INDEX 和 MATCH」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Excel Formulas Academy 课中编写并运行代码吗?
能。每节 Excel Formulas Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 使用 INDEX 提取数值
- 使用 MATCH 查找位置
- 组合使用 INDEX 和 MATCH
- 为什么 INDEX-MATCH 优于 VLOOKUP