作为Excel新手,你可能已经用过VLOOKUP,但今天我要教你一个更强大、更灵活的查找组合:INDEX + MATCH。
先看一个实际案例
假设你有一张员工信息表:
| 员工ID | 姓名 | 部门 | 薪资 |
|---|---|---|---|
| E001 | 张三 | 销售部 | 8000 |
| E002 | 李四 | 技术部 | 12000 |
| E003 | 王五 | 市场部 | 9500 |
| E004 | 赵六 | 技术部 | 11000 |
现在我们需要根据员工ID查找对应的薪资。
VLOOKUP的经典做法
=VLOOKUP("E003", A2:D5, 4, FALSE)
结果: 9500
缺点:
- 只能从左往右查
- 插入/删除列时需要手动调整列号
- 查找值必须在第一列
INDEX-MATCH 解决方案
第一步:理解两个函数
MATCH函数 - 专门找位置
=MATCH(找什么, 在哪里找, 匹配类型)
- 找什么:要查找的值(如"E003")
- 在哪里找:查找范围(如A2:A5)
- 匹配类型:0表示精确匹配
INDEX函数 - 根据位置返回值
=INDEX(返回哪个区域, 第几行, [第几列])
- 返回哪个区域:包含你要返回值的数据区域
- 第几行:数据所在的行号
第二步:组合起来使用
案例1:基本查找(代替VLOOKUP)
需求: 根据员工ID(E003)查薪资
=INDEX(D2:D5, MATCH("E003", A2:A5, 0))
分步解析:
MATCH("E003", A2:A5, 0)→ 在A2:A5中找"E003",返回位置3INDEX(D2:D5, 3)→ 在D2:D5中取第3个值 →9500
完整公式示例:
=INDEX($D$2:$D$5, MATCH(G2, $A$2:$A$5, 0))
(假设G2单元格输入要查找的ID)
第三步:实际应用场景
场景1:反向查找(VLOOKUP做不到!)
需求: 根据薪资找员工姓名
=INDEX(B2:B5, MATCH(12000, D2:D5, 0))
结果: 李四
场景2:双条件查找
假设表格增加"入职年份"列:
| 员工ID | 姓名 | 部门 | 入职年 | 薪资 |
|---|---|---|---|---|
| E001 | 张三 | 销售部 | 2020 | 8000 |
| E002 | 李四 | 技术部 | 2019 | 12000 |
| E003 | 王五 | 市场部 | 2020 | 9500 |
需求: 找技术部、2019年入职的员工薪资
=INDEX(E2:E5, MATCH(1, (C2:C5="技术部")*(D2:D5=2019), 0))
数字 1 是整个双条件匹配的逻辑核心。它不是一个简单的数字,而是一个匹配目标,代表“两个条件同时为真”。
重要: 这是数组公式,输入后按 Ctrl+Shift+Enter
详细对比表
| 特性 | VLOOKUP | INDEX-MATCH | 胜出方 |
|---|---|---|---|
| 查找方向 | 只能从左向右 | 任意方向 | INDEX-MATCH |
| 列变动 | 插入/删除列需调整列号 | 自动适应 | INDEX-MATCH |
| 性能 | 大型数据较慢 | 大型数据更快 | INDEX-MATCH |
| 灵活性 | 有限 | 极高 | INDEX-MATCH |
| 学习难度 | 简单 | 稍复杂 | VLOOKUP |