Excel INDEX+MATCH 查找怎么用(比 VLOOKUP 灵活)
VLOOKUP 只能从左往右找——想反过来找、或者怕中间插列把列号弄错,就该用 INDEX+MATCH 组合。本文先讲清两个函数各自做什么,再教你组合写法和实例,最后教你用超级表「关联列」点几下完成同样的查找,完全不用记函数。
VLOOKUP 的限制:为什么要学 INDEX+MATCH
如果你用过 VLOOKUP 匹配两个表格,一定遇到过这两个坑:
- 只能从左往右找:查找列必须在返回列的左边,想从右列查左列,VLOOKUP 直接没辙。
- 列号写死易错:
=VLOOKUP(A2, B:D, 2, FALSE)里的2是硬编码的,中间插一列,所有列号全错位,得手动一个个改。
INDEX+MATCH 组合正好解决这两个问题。理解它需要先分别弄清 MATCH 和 INDEX 各自是什么。
MATCH 函数:返回位置,不返回值
MATCH 的作用只有一件事:在一列(或一行)里找某个值,返回它在第几个位置。
语法:=MATCH(查找值, 查找范围, 匹配类型)
第三个参数「匹配类型」几乎永远写 0,表示精确匹配。写 1 或 -1 是近似匹配,日常查找很少用。
举例:员工信息表的 A 列是姓名,依次是张三、李四、王五。
=MATCH("李四", A:A, 0)
返回 2——李四在第 2 行(忽略表头则从数据行算起)。MATCH 只告诉你「在第几个」,不告诉你那一行的其他数据是什么。
INDEX 函数:按位置取值
INDEX 的作用也只有一件事:在一列(或区域)里,取第 N 个位置的值。
语法:=INDEX(取值范围, 行号)(单列场景,不需要列号)
举例:员工信息表的 C 列是部门。
=INDEX(C:C, 2)
返回 C 列第 2 行的值——也就是李四的部门。
INDEX 只做「按位置取值」,至于位置怎么来——交给 MATCH 算。
INDEX+MATCH 组合写法、实例和优势
把两个函数套在一起,MATCH 算位置,INDEX 用这个位置去取值,就完成了「按某值查找、返回另一列结果」的全部工作:
=INDEX(返回列, MATCH(查找值, 查找列, 0))
具体实例:表 A 只有员工姓名(A 列),表 B 有姓名(B 列)和部门(D 列)。想把表 B 里每人的部门匹配到表 A。在表 A 的部门列写:
=INDEX(表B!D:D, MATCH(A2, 表B!B:B, 0))
解读:先用 MATCH 在表 B 的 B 列里找到 A2 的姓名在第几行;再用 INDEX 去表 B 的 D 列取那一行的部门。往下拖,整列匹配完毕。
比 VLOOKUP 的两个核心优势:
- 反向查找没问题:查找列(B 列)在返回列(D 列)左边、右边、任意位置都行。VLOOKUP 要求查找列必须最左,INDEX+MATCH 无此限制——想从部门反查姓名也一样写。
- 插列不会出错:INDEX 指向的是具体的一整列(
D:D),不是「第几列」这样的数字偏移量。表 B 中间插再多列,公式里的D:D还是 D 列,结果不变。VLOOKUP 里的列号2是硬编码的,插列就全错。
#N/A。公式能解决问题,但不是最省脑子的路。
更简单:超级表关联列,点几下搞定,不分左右
超级表(TableDI)把「按某列匹配两张表」做成了可视化操作——「关联列」功能本质上和 INDEX+MATCH 做的事一样,但不用写任何公式,也不用关心查找列在左还是在右。步骤:
- 把两张表都导入超级表(Excel / CSV 直接拖进来)。
- 在「员工名单」表上新建一个关联列,选择「按 姓名 匹配 员工信息表」。
- 勾选要带过来的列(部门、年龄、工号——任意列,一次全选,不用一列写一次公式)。
- 完成。匹配结果自动填好。之后员工信息表一改,这边自动更新,不用重拖公式。
关联列不区分查找列在左还是在右——这和 INDEX+MATCH 的反向查找优势是一样的,只是你完全不需要记语法。想了解更通用的可视化计算方式,可以看用公式面板代替 VLOOKUP。如果你还在用 VLOOKUP 做最基础的匹配,也可以先读两个表格怎么匹配数据打好基础。
INDEX+MATCH 对比超级表关联列
| 对比项 | Excel INDEX+MATCH | 超级表关联列 |
|---|---|---|
| 能反向查找(右列查左列) | 能 | 能,不分方向 |
| 插列会不会出错 | 不会,列名定位 | 不会,字段名定位 |
| 需要记语法 | 要记两个函数嵌套 | 不需要,全程点选 |
| 同时匹配多列 | 每列写一遍公式 | 一次全勾 |
| 源表更新后 | 不自动,要重拖 | 自动更新 |
| 数据量大 | 全表扫,易变慢 | 跟手不卡 |
常见问题
INDEX+MATCH 比 VLOOKUP 好在哪?
两点核心优势:第一,反向查找——查找列可以在返回列的任意位置,不要求必须最左;第二,插列不坏公式——INDEX 直接引用列名而非列号偏移量,表格中间插列也不会让公式算错。代价是要记两个函数的嵌套写法,比 VLOOKUP 更复杂一些。
MATCH 第三参数 0 是什么意思?
MATCH 的第三参数控制匹配方式:0 表示精确匹配,只有完全相等才算找到;1 表示小于等于近似匹配(要求数据升序排列);-1 表示大于等于近似匹配(要求数据降序排列)。日常按某列值查找几乎永远用 0,写其他值容易得到意外结果。
INDEX+MATCH 能做多条件查找吗?
可以,但写法更复杂,需要用数组公式:=INDEX(返回列, MATCH(1, (条件列1=值1)*(条件列2=值2), 0)),在 Excel 中用 Ctrl+Shift+Enter 确认(新版 Excel 365 已不需要)。条件越多公式越难维护;在超级表里多条件匹配同样是点选操作,不用写数组公式。