当前位置:首页>python>左手Excel右手Python | MATCH函数——找位置最快的神,INDEX的最佳拍档

左手Excel右手Python | MATCH函数——找位置最快的神,INDEX的最佳拍档

  • 2026-10-11 06:57:31
左手Excel右手Python | MATCH函数——找位置最快的神,INDEX的最佳拍档
这里有最实用的Excel使用技巧,通过提高Excel技能,可以让你轻松应对工作中的表格处理,提高你的工作效率!欢迎大家Follow关注~~

相信大家都遇到过这样的情景:同事发来一张几千行的员工表,让你把"张三"的工资找出来。你用Ctrl+F一个个翻,翻了5分钟才找到——在第386行。

但问题是:找到了行号,还得去另一列对应位置把工资复制出来。

今天要说的MATCH函数就是解决这个问题的——它专门帮你找"位置",找到后交给INDEX去拿数据。两个函数配合,比VLOOKUP灵活10倍。


一、MATCH 是干什么的?

一句话概括:MATCH 返回一个值在区域中的位置(第几个),不是返回值本身。
语法:=MATCH(查找值, 查找区域, 匹配类型)

参数

说明

常用值

查找值

你要找什么

"张三"、10086、A2

查找区域

到哪里找

A:A、B2:B100

匹配类型

怎么匹配

0=精确   1=升序近似 -1=降序近似

三个匹配类型——这是MATCH最强大的地方。

二、实战场景

场景1:精确匹配——查找员工排名

痛点:业绩表里几百号人,想知道"赵六"排在第几行,总不能让我们工作人员一个个的数。用Match函数可以轻松搞定!

A

B

姓名

销售额

张三

98,500

李四

76,200

王五

112,300

赵六

89,100

陈七

65,800

周八

103,400

公式:=MATCH("赵六", A2:A7, 0)

结果: 4(赵六在A2:A7中是第4个)

注意:MATCH返回的是相对位置(从查找区域的第1行算起),不是Excel行号。上面例子里赵六是A5单元格,但查找区域是A2:A7,所以返回4(A2=1, A3=2, A4=3, A5=4)。

场景2:近似匹配——成绩等级判定

痛点:表1是分数登记,按表1的等级根据表2的分数自动判定"优秀/良好/及格/不及格",IF嵌套太长了。

A

B

C

分数

等级

辅助列

0

不及格

60

及格

80

良好

90

优秀

公式:=INDEX(B2:B5, MATCH(E2, A2:A5, 1))

D

E

F

姓名

分数

等级

张三

85

=INDEX(B2:B5, MATCH(E2, A2:A5, 1))

李四

59

→ "不及格"

王五

92

→ "优秀"

赵六

73

→ "及格"

匹配类型=1的原理:升序近似匹配,MATCH找到小于等于查找值的最大值的位置。
E2=85 → A2:A5中≤85的最大值是80(第3个)→ 返回3 → INDEX(B2:B5,3)="良好"
E3=59 → A2:A5中≤59的最大值是0(第1个)→ 返回1 → "不及格"

匹配类型=1的前提:查找区域必须按升序排列(0→60→80→90),否则结果不准。

场景3:通配符匹配——模糊查找员工编号

痛点:员工编号格式是"DEP-2026-001",你只记得部门是"DEP",想找出所有DEP开头的编号。
公式:=MATCH("DEP*", A2:A100, 0)

员工编号

姓名

FIN-2026-015

张三

DEP-2026-001

李四

DEP-2026-002

王五

HR-2026-008

赵六

=MATCH("DEP*", A2:A5, 0) → 返回2(第一个DEP开头的在A3,区域第2个)

通配符规则:

通配符

含义

示例

*

任意多个字符

"DEP*" 匹配所有DEP开头

?

单个任意字符

"A?" 匹配A1、A2,不匹配A10

~

转义符

"~*" 匹配星号本身

通配符只能在匹配类型=0(精确匹配)时使用,1和-1不支持。

场景4:INDEX+MATCH 双剑合璧——替代VLOOKUP

痛点:VLOOKUP有个致命缺点——查找值必须在查找区域的第一列。如果要根据姓名找工号(姓名在工号左边),VLOOKUP就抓瞎了。

A

B

C

工号

姓名

部门

EMP001

张三

技术部

EMP002

李四

市场部

EMP003

王五

财务部

需求: 根据姓名"李四"找工号。

VLOOKUP做不到——姓名在B列,但返回值工号在A列(左边)。
INDEX+MATCH:=INDEX(A2:A4, MATCH("李四", B2:B4, 0))

结果: EMP002

对比

VLOOKUP

INDEX+MATCH

查找值位置

必须在第一列

任意位置

反向查找

❌ 不支持

✅ 支持

列插入影响

列号写死,插入列后要改公式

引用区域,插入列不影响

查找方式

默认近似匹配

可指定精确/近似/通配符

速度

整列查找较慢

指定区域更快

进阶:二维交叉查找

1月

2月

3月

张三

85

92

78

李四

90

88

95

王五

78

85

80

需求: 查找"李四"的"2月"成绩。

=INDEX(B2:D4, MATCH("李四", A2:A4, 0), MATCH("2月", B1:D1, 0))
MATCH("李四", A2:A4, 0) → 2(第二行)
MATCH("2月", B1:D1, 0) → 2(第二列)
INDEX(B2:D4, 2, 2) → 88 ✅

这就是传说中的二维查找,VLOOKUP做不到,INDEX+MATCH轻松搞定。


三、三种匹配类型速查

匹配类型

名称

查找区域要求

没找到时

典型场景

0

精确匹配

任意顺序

返回#N/A

查找员工编号、姓名等

1

升序近似

必须升序排列

返回小于查找值的最大值位置

成绩等级、税率计算

-1

降序近似

必须降序排列

返回大于查找值的最小值位置

反向价格区间查找

使用技巧:

90%的场景用0(精确匹配)
9%的场景用1(区间判定,如成绩等级、阶梯提成)
1%的场景用-1(逆向区间,很少用到)

四、常见错误及避坑

以上就是Match函数的一些主要用法,这个函数平时用的比较多,也比较容易出错,这里给大家总结一下一些常见的错误:

错误

原因

解决方案

#N/A

没找到匹配值

用IFERROR兜底:=IFERROR(MATCH(...), "未找到")

#VALUE!

查找区域维度不匹配

检查区域是一行还是一列

结果比预期大1或小1

区域起止行搞错了

MATCH从区域第一行算起,不是Excel行号

近似匹配结果不对

忘了升序排列

匹配类型=1时,查找区域必须升序

文本数字混用

"100"和100不匹配

TEXT(A2,0)统一格式


主要注意这几个避坑点,相信大家用起来会更加的得心应手。好了,今天的分享就到这里了,如果觉得有用的,别忘了转发加关注,谢谢大家,我们下期再见!


附:长期坚持原创不易,如文章能够为大家带来少少帮助的,请大家点赞并转发,以支持我继续分享创作,你的支持将是我的不竭动力!谢谢!
(本文为本公众号原创,未经允许和授权,严禁转载,违者必究)

最新文章

随机文章