INDEX + MATCH 为什么比 VLOOKUP 好用?三个真实场景对比

2026-10-21 5 次浏览 Excel 函数
VLOOKUP 不能向左查、插入列会错、区域要手框。这三点 INDEX + MATCH 全能解决。这篇用同一张表做对照,把两种写法摆在一起看。
=INDEX(要返回的那一列, MATCH(要找的值, 查找的那一列, 0))
用途按一个值查另一列的内容,方向不限(左、右都可以)。

如果你已经会 VLOOKUP,这篇会有点"推翻认知"。

但先别急。VLOOKUP 不是不好,它只是有三个天生的短板。等你踩过这三次坑,自然会想换。

关键如果 VLOOKUP 你还没用熟,先看 VLOOKUP 怎么用,那里把四个参数和常见报错都拆开讲了。

先把两个函数分别做什么说清楚

它们单独用都不太有用,配起来才完整。

MATCH:找出"第几行"

=MATCH("王五", A2:A10, 0)

意思是:在 A2:A10 里找"王五",它是第几个?

结果是 3(如果王五在 A4,那是区域里的第 3 个)。

关键第三个参数填 0 表示精确匹配。和 VLOOKUP 一样,日常都用 0。

INDEX:取出"第几行"的内容

=INDEX(C2:C10, 3)

意思是:在 C2:C10 这个区域里,取第 3 个。

注意一个关键点:INDEX 只要求"一列",不要求"多列"。 这是它比 VLOOKUP 灵活的根本原因——VLOOKUP 必须框一个矩形区域,然后数"第几列",INDEX 不用。

合起来

把 MATCH 的结果塞进 INDEX:

=INDEX(C2:C10, MATCH("王五", A2:A10, 0))

读作:找出王五在第几行,然后取那一行 C 列的内容。

这就完成了"按姓名查部门"。

场景一:向左查找(VLOOKUP 的死穴)

表结构:

工号姓名部门
A001张三技术部
A002李四市场部
A003王五技术部

需求:知道姓名,查工号。

姓名在 B 列,工号在 A 列——要的结果在钥匙的左边。

VLOOKUP 的做法

它要求钥匙必须在区域第一列,所以要么把表改造一遍,要么写一段很难懂的数组公式:

=VLOOKUP("李四", IF({1,0}, B2:B4, A2:A4), 2, 0)

能用,但新人看不懂,而且必须按 Ctrl+Shift+Enter。

INDEX + MATCH 的做法

=INDEX(A2:A4, MATCH("李四", B2:B4, 0))

没有方向限制。 因为 INDEX 是「直接指定要哪一列」,MATCH 是"直接指定在哪一列找",两者完全独立。

关键除了 INDEX + MATCH,其实还有 6 条路能解决同一个查找需求,各有利弊,见 8 种查找解法对比。
关键这是 INDEX+MATCH 最核心的优势:查找列和返回列互不相干,爱在哪在哪。

场景二:插入列(VLOOKUP 会悄悄出错)

需求:在"姓名"和"部门"之间插入一列"手机号"。

插入后表变成:

工号姓名手机号部门
A001张三138...技术部

VLOOKUP 会怎样

原来写的 `=VLOOKUP(..., 区域, 3, 0)` 里的"3"指的是"区域第 3 列"。

插入一列后,第 3 列变成了手机号,第 4 列才是部门。

结果:公式不报错,但返回了手机号。

这是 VLOOKUP 最危险的错误类型——静默错误。它不报警,你也不会立刻发现,等交上去才被人指出来。

INDEX + MATCH 会怎样

=INDEX(D2:D10, MATCH("李四", B2:B10, 0))

因为 `D2:D10` 是直接指向"部门"这一列的,插入列时 Excel 会自动把 `D2:D10` 调整成 `E2:E10`(Excel 的引用调整机制会跟踪列位移)。

结果依然正确。

关键这个差别看起来很技术,但实际工作中非常要命。表格结构是会变的,VLOOKUP 的"第几列"是个硬编码的数字,一变就错。

场景三:区域要扩展(VLOOKUP 要手改)

需求:表从 10 行涨到 500 行。

VLOOKUP

`$A$2:$C$10` 这个范围写死了,新数据加在下面就不在范围内。要手动改成 `$A$2:$C$500`。

有人图省事写 `A:C`(整列),能用,但整列扫描在大表上会明显变慢。

INDEX + MATCH

也一样要改范围。这一点上两者差不多,不算 INDEX 的优势。

但有个技巧:用表格(Ctrl+T) 把数据转成"超级表"后,引用会自动扩展,两个函数都不用改。

关键所以我更推荐的做法是:不管用哪个函数,都先 Ctrl+T 把源数据变成表格。这样两边的痛点都解决了。

一张表看清怎么选

场景VLOOKUPINDEX+MATCH
向右查(最常见的)✅ 简单直观✅ 稍长一点
向左查❌ 要数组公式✅ 天然支持
表格会插列❌ 静默出错✅ 不受影响
表会加行⚠️ 要改范围⚠️ 要改范围
新手可读性✅ 一眼看懂⚠️ 两个函数要理解
多条件查找❌ 要拼辅助列✅ 可以直接拼

什么时候还是用 VLOOKUP

别被"INDEX+MATCH 更高级"带偏。这几种情况 VLOOKUP 更合适:

  • 表结构稳定、只向右查、自己一个人用 → VLOOKUP 更短更直观
  • 需要给同事看、要给新人交接 → VLOOKUP 认知成本低
  • 查区间(第四参数填 1)→ VLOOKUP 是标准方案,INDEX+MATCH 做不了
关键我的实际用法:日常小表用 VLOOKUP,做正式报表、给别人维护的表用 INDEX+MATCH。不是谁更高级,是场景不同。

进阶:多条件查找

"找出'技术部 + 张三'的工资"这种需求,VLOOKUP 要建辅助列,INDEX+MATCH 可以直接写:

=INDEX(D2:D10, MATCH(1, (B2:B10="张三")*(C2:C10="技术部"), 0))

原理:`(条件1)*(条件2)` 会得到一串 0 和 1,只有两个条件都满足的那一行是 1。MATCH 找这个 1 的位置。

关键这是数组公式。Excel 365 / 2021 直接回车;2016 及更早要按 Ctrl+Shift+Enter。

完整操作步骤

  1. 输入 `=INDEX(`
  2. 框选"要返回的那一列"(比如部门列),按 F4 锁定,输入 `,`
  3. 输入 `MATCH(`
  4. 点一下要查的值,输入 `,`
  5. 框选"要在哪一列找",按 F4 锁定,输入 `,`
  6. 输入 `0`,输入 `)`,再输入 `)`,回车

一句话总结

INDEX 说"我要哪一列",MATCH 说"它在第几行",两个一拼,方向随便、插列不乱。
关键学完这篇,建议回头看 VLOOKUP 那篇。用两种写法解同一道题,你会有"原来如此"的感觉——这也是理解函数最快的路径。

评论 0

还没有评论,来说第一句吧。

发表评论

提交后需审核通过才会显示。

对作品感兴趣?

欢迎交流使用体验、功能建议或技术问题,看到消息我会尽快回复。