讲真,还在用VLOOKUP的兄弟,该升级了。
先说痛点
你有没有遇到过这种情况:
- 要查找的值在第1列的右边,VLOOKUP当场罢工
- 表格列数太多,数第几列数到眼瞎
- 插入一列,所有公式崩了
如果你点头了,那INDEX+MATCH就是来拯救你的。
这两个函数是干嘛的?
MATCH:找位置
=MATCH(找什么, 在哪找, 匹配方式)
简单说,就是问Excel:"我要找的东西在第几个?"
| 参数 | 说明 |
|---|---|
| 找什么 | 你要查找的值 |
| 在哪找 | 单行或单列的范围 |
| 匹配方式 | 0=精确匹配,1=小于,-1=大于 |
例子:
=MATCH("张三", A2:A10, 0)
返回:"张三"在A2:A10中是第几个(假设是第3个,就返回3)
INDEX:取内容
=INDEX(范围, 第几行, [第几列])
简单说:"给我这个区域的第N行第M列的值"
例子:
=INDEX(B2:D10, 3, 2)
返回:B2:D10这个区域,第3行第2列的值
组合起来用:无敌了
核心思路: MATCH找到行号,INDEX根据行号取值。
=INDEX(要返回的区域, MATCH(查找值, 查找列, 0))
实战案例
假设有这样一个员工表:
| 工号 | 姓名 | 部门 | 工资 |
|---|---|---|---|
| 1001 | 张三 | 技术部 | 15000 |
| 1002 | 李四 | 销售部 | 12000 |
| 1003 | 王五 | 技术部 | 18000 |
需求:根据姓名查工号
VLOOKUP做不到(工号在左边),但INDEX+MATCH轻松搞定:
=INDEX(A2:A4, MATCH("李四", B2:B4, 0))
结果:1002
为什么它比VLOOKUP强?
| 功能 | VLOOKUP | INDEX+MATCH |
|---|---|---|
| 查找方向 | 只能往右查 | 左右随便查 |
| 插入列影响 | 会崩 | 稳如老狗 |
| 大数据性能 | 慢 | 更快 |
| 理解难度 | 简单 | 稍微绕一点 |
进阶玩法:双向查找
如果行和列都要动态查?
=INDEX(A1:D10, MATCH(行查找值, A列, 0), MATCH(列查找值, 第1行, 0))
实际例子:
根据"姓名"和"月份"查销售额:
=INDEX($B$2:$F$10, MATCH(A13,$A$2:$A$10,0), MATCH(B13,$B$1:$F$1,0))
我踩过的坑(你别踩)
-
MATCH找不到会返回#N/A,记得用IFERROR包一下:
=IFERROR(INDEX(...), "未找到") -
范围要对应,MATCH查的是单列,INDEX的范围行数要匹配
-
绝对引用别忘了,复制公式时$符号是你的朋友
一句话总结
INDEX+MATCH = 灵活 + 强大 + 不会崩
学会了这个,你可以跟同事说:"VLOOKUP?那是上个时代的产物了。"