Excel INDEX 与 MATCH 函数 #
函数概览 #
INDEX 和 MATCH 组合是 Excel 中最强大的查找方式,比 VLOOKUP 更灵活。
text
┌─────────────────────────────────────────────────────────────┐
│ INDEX 与 MATCH 概览 │
├─────────────────────────────────────────────────────────────┤
│ │
│ INDEX 返回值 =INDEX(范围, 行号, [列号]) │
│ MATCH 查找位置 =MATCH(值, 范围, 匹配类型) │
│ │
│ 组合使用: │
│ =INDEX(返回范围, MATCH(查找值, 查找范围, 0)) │
│ │
└─────────────────────────────────────────────────────────────┘
INDEX 函数 #
语法 #
excel
=INDEX(array, row_num, [column_num])
参数:
- array: 单元格范围
- row_num: 行号
- column_num: 列号(可选)
返回:指定位置的单元格值
基本用法 #
excel
=INDEX(A1:C3, 2, 3) 返回第2行第3列的值
=INDEX(A:A, 5) 返回A列第5行的值
=INDEX(A1:Z1, 1, 10) 返回第10列的值
示例 #
text
数据:
A B C
1 产品A 100 北京
2 产品B 200 上海
3 产品C 150 广州
=INDEX(A1:C3, 2, 1) → "产品B" 第2行第1列
=INDEX(A1:C3, 2, 2) → 200 第2行第2列
=INDEX(A1:C3, 3, 3) → "广州" 第3行第3列
引用形式 #
excel
=INDEX(区域1, 区域2, 行号, 列号)
返回单元格引用而非值
MATCH 函数 #
语法 #
excel
=MATCH(lookup_value, lookup_array, [match_type])
参数:
- lookup_value: 要查找的值
- lookup_array: 查找范围(单行或单列)
- match_type: 匹配类型
- 0:精确匹配
- 1:小于等于的最大值(要求升序)
- -1:大于等于的最小值(要求降序)
返回:位置(从1开始)
基本用法 #
excel
=MATCH("产品B", A1:A3, 0) 精确匹配,返回位置
=MATCH(200, B1:B3, 0) 查找200的位置
=MATCH(150, B1:B3, 1) 模糊匹配(升序)
示例 #
text
数据:
A B
1 产品A 100
2 产品B 200
3 产品C 150
=MATCH("产品B", A1:A3, 0) → 2 "产品B"在第2个位置
=MATCH(200, B1:B3, 0) → 2 200在第2个位置
=MATCH("产品D", A1:A3, 0) → #N/A 找不到
匹配类型详解 #
excel
精确匹配(0):
=MATCH("产品B", A:A, 0)
- 必须完全匹配
- 不要求排序
- 找不到返回 #N/A
模糊匹配(1):
=MATCH(150, A:A, 1)
- 查找小于等于的最大值
- 要求升序排列
- 适用于区间查找
模糊匹配(-1):
=MATCH(150, A:A, -1)
- 查找大于等于的最小值
- 要求降序排列
INDEX + MATCH 组合 #
基本公式 #
excel
=INDEX(返回范围, MATCH(查找值, 查找范围, 0))
相当于 VLOOKUP,但更灵活
与 VLOOKUP 对比 #
excel
VLOOKUP:
=VLOOKUP("产品B", A:C, 2, FALSE)
INDEX + MATCH:
=INDEX(B:B, MATCH("产品B", A:A, 0))
两者结果相同,但 INDEX+MATCH 更灵活
INDEX+MATCH 的优势 #
text
┌─────────────────────────────────────────────────────────────┐
│ INDEX+MATCH vs VLOOKUP │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. 可以向左查找 │
│ VLOOKUP 只能向右查找 │
│ │
│ 2. 列号不受限制 │
│ VLOOKUP 列号从查找列开始计数 │
│ │
│ 3. 插入列不影响 │
│ VLOOKUP 列号可能需要修改 │
│ │
│ 4. 性能更好 │
│ 大数据量时计算更快 │
│ │
│ 5. 可以双向查找 │
│ 同时按行和列查找 │
│ │
└─────────────────────────────────────────────────────────────┘
向左查找 #
excel
VLOOKUP 无法实现:
=VLOOKUP("产品B", B:A, 2, FALSE) ✗ 错误
INDEX+MATCH 可以:
=INDEX(A:A, MATCH("产品B", B:B, 0)) ✓ 正确
示例:
A B
1 产品名 产品ID
2 产品A P001
3 产品B P002
根据产品ID查找产品名:
=INDEX(A:A, MATCH("P002", B:B, 0)) → "产品B"
双向查找 #
excel
同时按行和列查找:
A B C D
1 1月 2月 3月
2 销售额 10000 12000 15000
3 成本 6000 7000 8000
查找"成本"在"2月"的值:
=INDEX(B2:D3, MATCH("成本", A2:A3, 0), MATCH("2月", B1:D1, 0))
→ 7000
实际示例 #
text
产品信息查询:
A B C D
1 产品ID 产品名 单价 库存
2 P001 产品A 100 50
3 P002 产品B 200 30
4 P003 产品C 150 80
查询产品名:
=INDEX(B:B, MATCH("P002", A:A, 0)) → "产品B"
查询单价:
=INDEX(C:C, MATCH("P002", A:A, 0)) → 200
查询库存:
=INDEX(D:D, MATCH("P002", A:A, 0)) → 30
多条件查找 #
原理 #
excel
=INDEX(返回范围, MATCH(1, (条件1)*(条件2)*(条件3), 0))
数组公式,旧版需 Ctrl+Shift+Enter
示例 #
text
数据:
A B C D
1 部门 产品 月份 销售额
2 华东 产品A 1月 10000
3 华东 产品B 1月 15000
4 华北 产品A 1月 8000
5 华东 产品A 2月 12000
查找华东区产品A在1月的销售额:
=INDEX(D:D, MATCH(1, (A:A="华东")*(B:B="产品A")*(C:C="1月"), 0))
→ 10000
Excel 365 可使用:
=FILTER(D:D, (A:A="华东")*(B:B="产品A")*(C:C="1月"))
使用 SUMPRODUCT #
excel
如果返回值是数值,可以使用 SUMPRODUCT:
=SUMPRODUCT((A:A="华东")*(B:B="产品A")*(C:C="1月")*D:D)
函数组合应用 #
查找最后一个值 #
excel
=INDEX(A:A, MATCH(9^9, B:B, 1))
或(Excel 365):
=INDEX(A:A, MATCH(2, 1/(B:B<>"")))
查找第一个非空值 #
excel
=INDEX(A:A, MATCH(TRUE, A:A<>"", 0))
数组公式
动态范围查找 #
excel
=INDEX(A:A, MATCH(查找值, B:B, 0)):INDEX(C:C, MATCH(查找值, B:B, 0))
返回一个动态范围
实战案例 #
案例1:员工信息查询 #
text
员工表:
A B C D
1 工号 姓名 部门 职位
2 E001 张三 销售部 经理
3 E002 李四 技术部 工程师
查询工号E002的部门:
=INDEX(C:C, MATCH("E002", A:A, 0)) → "技术部"
根据姓名查工号(向左查找):
=INDEX(A:A, MATCH("李四", B:B, 0)) → "E002"
案例2:双向查找 #
text
销售数据:
A B C D
1 1月 2月 3月
2 产品A 100 120 150
3 产品B 200 180 220
查找产品B在2月的销量:
=INDEX(B2:D3, MATCH("产品B", A2:A3, 0), MATCH("2月", B1:D1, 0))
→ 180
案例3:多条件查找 #
text
订单数据:
A B C D
1 日期 产品 区域 销量
2 1月1日 产品A 华东 100
3 1月1日 产品B 华东 150
4 1月2日 产品A 华北 80
查找1月1日华东区产品A的销量:
=INDEX(D:D, MATCH(1, (A:A="1月1日")*(B:B="产品A")*(C:C="华东"), 0))
→ 100
小结 #
INDEX 和 MATCH 组合是比 VLOOKUP 更强大的查找方式:
| 函数 | 用途 | 示例 |
|---|---|---|
| INDEX | 返回指定位置的值 | =INDEX(A:A, 5) |
| MATCH | 查找值的位置 | =MATCH("值", A:A, 0) |
| INDEX+MATCH | 灵活查找 | =INDEX(B:B, MATCH("值", A:A, 0)) |
接下来,让我们学习 XLOOKUP 函数,掌握新一代查找函数。
最后更新:2026-04-11