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