如果你用过 WPS 表格的 VLOOKUP,一定遇到过这两个痛点:查找列必须在最左边,而且只能返回右边列的数据。比如员工表里姓名在工号右边,你想根据姓名查工号——VLOOKUP 直接罢工。这时候就轮到 INDEX+MATCH 登场了。

INDEX+MATCH 是 WPS 表格里最强大的查找组合,没有之一。它不受”从左往右查”的限制,可以反向查找、多条件匹配、二维交叉查询,甚至能实现比 VLOOKUP 快数倍的大数据量查找。这篇文章用 6 个真实办公场景,从基础语法讲到高级技巧,帮你彻底掌握这对黄金搭档。

INDEX 函数:你想从哪一列拿数据?

INDEX 的作用是”给一个区域和一个位置编号,返回那个位置上的值”。它有两个版本:

数组形式(推荐):

=INDEX(数组, 行号, [列号])

引用形式:

=INDEX(引用, 行号, [列号], [区域编号])

日常使用中,90% 的情况用数组形式就够了。看一个例子:

假设 A 列是产品名称,B 列是价格。你想取第 3 个产品的价格:

=INDEX(B:B, 3)

公式遍历 B 列,取第 3 行的值——这就是 INDEX 最基础的用法。单独用它有点傻(因为你要手动数第几行),但和 MATCH 配合后就威力无穷了。

MATCH 函数:帮 INDEX 找到”第几行”

MATCH 的作用是针对一个查找值,返回它在某个区域中的位置编号:

=MATCH(查找值, 查找区域, [匹配类型])

匹配类型有三个选项:

  • 0(精确匹配):查找值必须完全一致,推荐日常使用
  • 1(升序近似匹配):查找区域必须升序排列,返回 ≤ 查找值的最大位置
  • -1(降序近似匹配):查找区域必须降序排列,返回 ≥ 查找值的最小位置

实操示例:在 A 列找”张三”在第几行:

=MATCH("张三", A:A, 0)

如果张三在 A 列第 7 行,公式返回 7。注意:MATCH 返回的是查找值在区域内的相对位置,不是工作表的绝对行号。如果查找区域是 A2:A20,张三在 A8,MATCH 返回 7(A8 是 A2:A20 的第 7 个单元格)。

黄金组合:INDEX + MATCH

把 MATCH 的结果作为 INDEX 的行号参数,就实现了”按内容查找”:

=INDEX(返回列, MATCH(查找值, 查找列, 0))

举个例子:A 列是员工姓名,C 列是部门。根据姓名查部门:

=INDEX(C:C, MATCH("李四", A:A, 0))

公式工作流程:MATCH 先在 A 列找到”李四”在第几行(比如第 5 行),INDEX 再去 C 列取第 5 行的值(李四的部门)。

这个基础组合已经能覆盖 80% 的查找需求了。但它的真正威力在下面四个进阶场景。

场景一:反向查找(VLOOKUP 做不到的事)

VLOOKUP 的核心限制:查找列必须在返回列的左边。而 INDEX+MATCH 没有这个限制。

场景:A 列是员工编号,B 列是姓名。现在要根据姓名反向查找员工编号。

VLOOKUP 方案:没法做,因为姓名在编号右边。

INDEX+MATCH 方案:

=INDEX(A:A, MATCH("王五", B:B, 0))

MATCH 在 B 列定位”王五”的行号,INDEX 去 A 列取同一行的员工编号。查找列和返回列可以任意排列,这是 INDEX+MATCH 相比 VLOOKUP 最大的优势。

真实案例:某公司人事表有 2000 行数据,员工编号在 A 列,姓名在 C 列,入职日期在 E 列。领导要求根据姓名快速查出员工编号和入职日期。用 INDEX+MATCH 写两个公式即可:

员工编号:=INDEX(A:A, MATCH(G2, C:C, 0))
入职日期:=INDEX(E:E, MATCH(G2, C:C, 0))

其中 G2 是输入姓名的单元格。你只需要在 G2 键入姓名,两个公式自动返回结果。如果改用 VLOOKUP,需要手动调整列顺序,或者重建一个辅助表。

场景二:多条件查找

单条件查找不够用?比如要根据”产品名称”和”规格型号”两个条件同时匹配,找到对应的价格。

数据表结构:A 列产品名,B 列规格,C 列价格。现在要根据 D2 的产品名和 E2 的规格,查出价格。

用数组公式(WPS 表格中按 Ctrl+Shift+Enter 输入):

=INDEX(C:C, MATCH(1, (A:A=D2)*(B:B=E2), 0))

公式拆解:

  • (A:A=D2) 产生一组 TRUE/FALSE(A 列中等于 D2 的行为 TRUE)
  • (B:B=E2) 同理
  • 两个数组相乘(TRUE=1, FALSE=0),只有同时满足两个条件的行才得到 1
  • MATCH(1, ..., 0) 找到第一个同时满足两个条件的行号
  • INDEX 返回该行 C 列的值

如果要查三个条件,继续乘条件即可:

=INDEX(D:D, MATCH(1, (A:A=条件1)*(B:B=条件2)*(C:C=条件3), 0))

如果你之前用过 WPS表格COUNTIF与COUNTIFS函数 做多条件统计,这个多条件查找的逻辑是类似的——只是把统计变成了定位和取值。

场景三:二维交叉查询(行列双向匹配)

上面的场景都是”按行查找”,但实际工作中经常遇到行列交叉的情况:比如一张销售表中,行是产品名称,列是月份,要根据”产品名 + 月份”找到对应的销售额。

数据布局:A2:A10 是产品名,B1:M1 是 1 月到 12 月的列标题,B2:M10 是销售数据。

公式:

=INDEX(B2:M10, MATCH("产品A", A2:A10, 0), MATCH("3月", B1:M1, 0))

这里 INDEX 用了三个参数(数组、行号、列号),两个 MATCH 分别定位行和列:

  • 第一个 MATCH 找到”产品A”在第几行
  • 第二个 MATCH 找到”3月”在第几列
  • INDEX 取出交叉点的值

这就是所谓的”二维查找”或”交叉查找”,是 VLOOKUP 完全无法实现的功能。如果你经常需要处理类似的数据表格,可以看看 WPS表格数据验证与下拉菜单 来优化输入体验,配合 INDEX+MATCH 做成一个自动查询工具。

场景四:模糊匹配 + 容错处理

有时查找值不完全精确,或者查找区域可能不包含目标值,公式会返回 #N/A 错误。结合 IFERROR 可以让公式更健壮:

=IFERROR(INDEX(C:C, MATCH(F2, A:A, 0)), "未找到")

如果 MATCH 找不到匹配,整个公式返回”未找到”而不是错误值,表格看起来干净多了。

近似匹配的实际应用:给员工评定绩效等级时,根据分数匹配等级区间。假设:

  • E2:E5 是分数阈值:0, 60, 80, 90
  • F2:F5 是对应等级:D, C, B, A
=INDEX(F2:F5, MATCH(G2, E2:E5, 1))

G2 是员工分数,MATCH 的第三个参数用 1(升序近似匹配),公式会自动匹配到对应的等级区间。84 分匹配到 80 这一档,返回 B。

INDEX+MATCH vs VLOOKUP:选哪个?

对比维度VLOOKUPINDEX+MATCH
查找方向只能从左向右任意方向
列插入/删除列号写死,增删列后公式出错自动适应列变化
运算速度整列查找时较慢更快(只查目标列)
多条件需要辅助列数组公式直接支持
学习成本低(一个函数)中(两个函数组合)
二维交叉不支持支持

如果你每天都用 VLOOKUP 做基础查找,建议继续用——它简单够用。但如果遇到反向查找、多条件匹配、或者表格列经常变动的情况,INDEX+MATCH 是更稳健的选择。关于 VLOOKUP 的详细用法,可以参考 WPS表格VLOOKUP函数完整教程。

另外,WPS 表格的较新版本(2023 及以上)已经支持 XLOOKUP 函数,它集成了 INDEX+MATCH 的所有优点,语法更简洁。如果你使用的 WPS 版本支持 XLOOKUP,可以优先考虑它。

常见错误排查

1. 返回 #N/A

这是最常见的错误,原因有三:

原因一:查找值确实不存在。 检查是否有拼写差异、多余空格。可以用 TRIM 函数清理数据:

=INDEX(C:C, MATCH(TRIM(F2), TRIM(A:A), 0))

原因二:数据格式不一致。 查找值是文本格式的数字,但查找区域是数值格式(或反过来)。选中数据列 → 右键 → 设置单元格格式 → 统一为”常规”或”数值”。

原因三:MATCH 的匹配类型不对。 如果第三个参数是 1 或 -1,但查找区域未排序,MATCH 可能返回错误位置或 #N/A。绝大多数场景用 0(精确匹配)。

2. 返回了错误的值

MATCH 找到的是第一个匹配的位置。如果查找区域有重复值,MATCH 只返回第一个。这种情况下需要结合其他条件做多条件匹配(见场景二)。

3. 公式输入后不计算

如果公式是正确的但单元格显示公式本身而不是计算结果,检查单元格格式是否为”文本”。改为”常规”后重新输入。如果公式不自动更新,可以看看 WPS表格公式不计算的解决方法 排查。

4. 引用区域被拖动后错位

下拉填充公式时,如果查找区域没有用绝对引用($),区域会跟着下移。用 F4 键快速切换引用类型:

=INDEX($C$2:$C$100, MATCH(F2, $A$2:$A$100, 0))

总结

INDEX+MATCH 是 WPS 表格中最值得花时间掌握的函数组合。它解决了 VLOOKUP 的方向限制,支持多条件和二维查询,在数据量大的场景下性能更好。核心公式就一行:

=INDEX(返回列, MATCH(查找值, 查找列, 0))

记住这个公式,反向查找、多条件匹配、交叉查询都是它的变体。先在简单的数据表上练习几次,熟悉之后你会发现,很多以前需要手动筛选半天的活,一行公式就搞定了。


常见问题 FAQ

Q1:INDEX+MATCH 和 VLOOKUP 哪个更快?

在大数据量(超过 1 万行)的情况下,INDEX+MATCH 通常比 VLOOKUP 快。因为 MATCH 只在单列查找,而 VLOOKUP 需要扫描整个表格区域。如果数据量不大(几百行以内),两者速度差异可忽略。

Q2:WPS 表格支持 INDEX+MATCH 的数组公式吗?

支持。WPS 表格兼容 Excel 的数组公式语法。输入多条件查找的公式后,按 Ctrl+Shift+Enter 确认,公式会自动被花括号 {} 包裹。WPS 2023 及以上版本也支持动态数组,不需要手动三键确认。

Q3:INDEX+MATCH 可以跨工作表查找吗?

可以。在 MATCH 的查找区域和 INDEX 的返回区域中引用其他工作表即可,语法和 VLOOKUP 跨表一样。例如:

=INDEX(Sheet2!B:B, MATCH(A2, Sheet2!A:A, 0))

Q4:INDEX 和 MATCH 一定要一起用吗?

不一定。MATCH 单独可以用来判断某个值是否存在于列表中(返回数字则存在,返回 #N/A 则不存在)。INDEX 单独可以用来提取指定位置的数据,比如取列表中的第 N 个值。

Q5:如果查找区域有重复值,MATCH 返回哪个?

MATCH 始终返回第一个匹配的位置。如果需要返回最后一个匹配值,可以用 LOOKUP 函数替代 MATCH。如果需要返回所有匹配值,建议使用 WPS 表格的筛选功能或高级筛选。