VLOOKUP查不到反方向?MATCH+INDIRECT+INDEX,三个函数配合就能反向查找

墨云轩
墨云轩 WPS资深用户Lv.3 优质创作者KVPWPS寻令官

Lv.3 优质创作者

前几天有老师问我一个问题:表格里员工号在左边、姓名在右边,现在手里只有姓名,想查工号,VLOOKUP写了半天就是查不出来。

其实不是公式写错,是方向不对。VLOOKUP天生只能「往右看」。

今天就把反向查找讲清楚,一共三件事:先说清什么叫反向查找,再用 MATCH + INDIRECT 做一遍,最后换成 INDEX + MATCH,公式更短、也更好维护。

一、先分清:正向查找和反向查找

下面这张表,A列员工号、B列员工姓名、C列职务,数据一共9条。

所谓正向查找,是指查找用的那一列在左边,要取的结果列在右边。比如用姓名查职务:姓名在B列,职务在C列,B在左、C在右,VLOOKUP第三个参数写个2,往右数第二列就是职务,很顺。

反向查找正好反过来:要查的姓名在B列,要取的员工号在A列,结果落在查找列的左边了。

而 VLOOKUP 第三个参数只能往右数,数不到左边去。所以这类问题,得换个思路:把「找」和「取」拆成两件事,分别交给合适的函数。

二、第一步:用 MATCH 找出「在第几行」

MATCH 顾名思义就是匹配,它只负责找位置,不负责任把东西取回来。

在员工号这一列(F2)里输入:

=MATCH(E2,B:B,0)

它有三个参数:第一个是要查找的值,这里写 E2,也就是要找的那个姓名;第二个是查找的区域,这里选 B 列;第三个是匹配类型,0 表示精确匹配。

回车,结果是 3。意思很直白:「久久」这个名字在B列的第3行。

注意这一步的定位——MATCH 只给出了一个行号,A102 并没有回来。这和 VLOOKUP 完全不一样,VLOOKUP 是「找」和「取」一起干的。

三、第二步:用 INDIRECT 把「a3」变成真正的引用

既然已经知道在第3行,要取的是A列,那目标单元格不就是 A3 吗?

先做拼接,把列字母和行号连起来:

="a"&MATCH(E2,B:B,0)

结果得到 a3。但这时候它只是四个字符的文本,Excel 不会把它当成单元格。

INDIRECT 的作用就在这儿:你给它一个有意义的字符串,它帮你把那个字符串对应的单元格里的内容引过来。所以外面再套一层:

=INDIRECT("a"&MATCH(E2,B:B,0))

回车,A107 就出来了。把E2换成别的姓名,结果跟着变,反查这条路就走通了。

一个细节:公式里我用的是小写 a,因为 Excel 不区分大小写,写 "A" 效果一样,看着习惯哪个就用哪个。

四、换个更顺手的:INDEX + MATCH

INDIRECT 这条路能走通,但每次都要拼字符串,列字母写错一个就全错。还有个更省事的写法,用到 INDEX。

INDEX 的思路是:给它一片区域,再告诉它第几行,它就把那一行取回来。比如:

=INDEX(B:B,3)

意思是在B列里取第3个,结果是「久久」,和我们刚才算出来的行号正好对得上。

既然INDEX吃的是「区域 + 行号」,而行号MATCH能算出来,那就把MATCH塞进INDEX的第二个参数里,字符串都不用拼了:

=INDEX(A:A,MATCH(E2,B:B,0))

读一遍就是:在A列里,取第「MATCH算出来的」那一行。一层套一层,直接出结果。

五、两种写法怎么选

两种写法都是「先找位置,再取内容」,区别只在于取的方式:一个拼地址再引用,一个按行号直接取。

写法

优点

要注意

MATCH + INDIRECT

能顺带把「引用」想明白

要拼字符串,列字母写错就全错

INDEX + MATCH

公式短,改列只改区域

要理解「区域 + 行号」的关系

我个人的习惯是日常用 INDEX + MATCH,尤其表格列偶尔要调整的时候,只改区域不用改字符串,省心。

六、公式汇总

1. 找位置(返回行号)

=MATCH(E2,B:B,0)

2. 拼出单元格地址文本

="a"&MATCH(E2,B:B,0)

3. 间接引用(MATCH + INDIRECT)

=INDIRECT("a"&MATCH(E2,B:B,0))

4. 单独用 INDEX 取指定行

=INDEX(B:B,3)

5. 反向查找(INDEX + MATCH)

=INDEX(A:A,MATCH(E2,B:B,0))

两句题外话

第一句,VLOOKUP 太能干了,「找」和「取」两件事都做,难免有些细节照顾不到,分工来完成一些事,反而是更好的选择。这话我觉得挺有道理,一个函数只干一件事,组合起来反而灵活。

第二句,MATCH、INDEX、INDIRECT 这三个都是老函数,WPS 和 Office 各版本基本都有,不用担心版本问题。反过来,新版里已经有 XLOOKUP,一个函数就能直接反向查,属于更省事的进阶路子——不过先把 MATCH + INDEX 这套弄明白,再看 XLOOKUP 会清楚很多。

以上就是这次的全部内容。写得不专业,都是自己的一点理解,如果哪里说得不对,欢迎留言指出来,先谢过各位大佬。

我是墨云轩,热衷分享办公小技巧,边学习,边分享,每天进步一点点!

河北省
浏览 93
收藏
7
分享
7 +1
5
+1
全部评论 5
 
拾光漫行
跟着墨老师学技术
   重庆
举报
0
2
拾光漫行
=CONCAT(IF(B2:B10=E2,A2:A10,""))
· 重庆
举报
0
0
 
HC.旋
HC.旋 WPS资深用户Lv.3 优质创作者WPS寻令官KVP

Lv.3 优质创作者

indirect还能这样用,学到了,路老师
   福建省
举报
0
1
墨云轩
墨云轩WPS资深用户Lv.3 优质创作者KVPWPS寻令官

Lv.3 优质创作者

·
举报
0
0