INDEX + MATCH:向左查找、二维查找与多条件查找

适用场景

VLOOKUP 只能往右查,列号写死以后插入列还会失效。INDEX/MATCH 把“取哪一行/列”和“找第几行”拆成两个函数:MATCH 负责定位,INDEX 负责取值,因此可以向左查、按二维表查、按多条件查,而且在旧版 Excel 里也能用。

语法

MATCH

=MATCH(lookup_value, lookup_array, [match_type])
match_type 含义 要求
0 精确匹配 最常用
1 小于等于查找值的最大值 查找区域升序
-1 大于等于查找值的最小值 查找区域降序

MATCH 返回的是查找值在区域中的位置序号,不是单元格地址。例如在 B2:B100 里找到第 5 个,返回 5。

INDEX

=INDEX(array, row_num, [column_num])

基本组合

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

假设 A 列编号、B 列姓名,要按编号查姓名:

=INDEX(B:B,MATCH(E2,A:A,0))

要按姓名查编号(向左查):

=INDEX(A:A,MATCH(E2,B:B,0))

VLOOKUP 做不到第二种,因为姓名在编号右边。

二维查找

假设 A2:A10 是产品,B1:M1 是月份,B2:M10 是数据:

=INDEX(B2:M10,MATCH("A 产品",A2:A10,0),MATCH("2026-01",B1:M1,0))

第一个 MATCH 找产品在第几行,第二个 MATCH 找月份在第几列,INDEX 再按行列取值。两个 MATCH 的查找区域要和 INDEX 区域的行列对应,否则会取到错误位置。

多条件查找

用连接符构造唯一键

最简单的方法是在数据表里加一列辅助键:

=A2&"|"&B2

然后用同样的方式拼接查找值:

=INDEX(D2:D100,MATCH(E2&"|"&F2,A2:A100&"|"&B2:B100,0))

在 Excel 365/2021 中直接回车即可;旧版 Excel 需要按 Ctrl+Shift+Enter 作为数组公式输入。

用乘法构造条件数组

=INDEX(D2:D100,MATCH(1,(A2:A100="华东")*(B2:B100="A"),0))

两个条件同时为真时乘积为 1,MATCH 找第一个 1。条件多时公式会变长,可读性不如辅助键;数据量大时数组运算也会变慢。

用 SUMPRODUCT

=SUMPRODUCT((A2:A100="华东")*(B2:B100="A")*D2:D100)

适合返回数值且每个条件只命中一条的情况;如果命中多条,会把它们相加,不一定是你想要的结果。

动态区域

INDEX 可以配合 MATCH 生成动态范围:

=SUM(INDEX(C:C,MATCH("开始",B:B,0)):INDEX(C:C,MATCH("结束",B:B,0)))

用两个 INDEX 分别定位开始和结束单元格,中间的 : 会形成动态区域。适合报表区间不固定的场景,但公式可读性较差,建议加注释或拆成辅助单元格。

易错点

相关条目

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. INDEX/MATCH 为什么能实现 VLOOKUP 做不到的向左查找?
  2. MATCH 的第三个参数省略时默认是什么匹配方式?
  3. 多条件查找时,用辅助键和用乘法数组各有什么取舍?
答案
  1. MATCH 只负责定位行号,INDEX 可以从任意列取值,不受查找列左右位置限制。
  2. 默认是 1 近似匹配,要求升序;日常查找必须写 0。
  3. 辅助键可读性好、计算稳定,但要改数据表;乘法数组不用加列,但公式长、数组运算慢,旧版还要按数组公式输入。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令