Excel里最让人又爱又恨的函数是谁?VLOOKUP!
爱它,因为它是职场人用得最多的查找函数,几乎每个数据报表都离不开;恨它,因为它语法麻烦、容易搞错、查不到返回#N/A、插入新列公式就失效。
2026年的今天,我要告诉你一个好消息——微软在Office 365里已经用XLOOKUP取代了VLOOKUP,语法更简单、功能更强大、还能左右查找。但VLOOKUP在老版本Office里还得用,所以本文两者都讲,从入门到精通,还附带10个职场实战案例。
一、先搞清楚:VLOOKUP到底是干嘛的?
VLOOKUP的全称是Vertical Lookup,也就是"垂直查找"。简单来说:在一张表里,根据你已知的一个值(比如姓名),找到对应的另一个值(比如电话号码)。
举个最常见的例子:公司员工表有一千人,你要找张三的工号。传统方法:Ctrl+F搜索"张三",找到后看旁边的工号列。但如果有N个张三?或者你要批量找几十个人?这时候VLOOKUP就是神器。
VLOOKUP的四个参数
=VLOOKUP(查找值, 查找区域, 返回列序号, 匹配类型)
第一个参数:查找值(你要找什么)
可以是一个具体的值,比如"张三";也可以是一个单元格引用,比如A2。大部分时候我们用单元格引用,因为要批量填充公式。
第二个参数:查找区域(在哪里找)
这是VLOOKUP最容易搞错的地方。查找区域必须满足一个条件:查找值所在的列必须是这个区域的第一列!
比如你要根据姓名查工号,那查找区域的第一列必须是姓名列,工号列在后面。如果工号列在姓名列前面,VLOOKUP就搞不定了(这就是XLOOKUP诞生的原因)。
第三个参数:返回列序号(找到后返回第几列)
注意!这个序号是相对于查找区域的,不是相对于整个表格的。比如查找区域是B:E,那序号1=B列,2=C列,3=D列,4=E列。
第四个参数:匹配类型(精确还是模糊)
0或FALSE = 精确匹配,找不到返回#N/A。99%的职场场景用这个!
1或TRUE = 近似匹配,只适用于数字区间查找(比如根据分数查等级)。用这个的时候查找区域的第一列必须升序排列。
VLOOKUP入门示例
假设A列是姓名(A2:A100),B列是工号(B2:B100),要找E2单元格"王五"的工号:
=VLOOKUP(E2, A:B, 2, 0)
意思:在A列找E2的值,找到后返回同一行的B列(区域第2列),精确匹配。
二、VLOOKUP最常见的5个坑
坑1:查找值不在第一列
比如你要根据工号查姓名,但工号在B列,姓名在A列。VLOOKUP搞不定,因为它只能从左往右找。
解决方法:用INDEX+MATCH组合,或者升级到XLOOKUP。
坑2:查找区域没加$锁行号
写公式时如果是=VLOOKUP(E2, A2:B100, 2, 0),向下填充的时候区域会变成A3:B101、A4:B102……数据区域会溜走!
正确写法:=VLOOKUP(E2, $A$2:$B$100, 2, 0),用$符号固定住行号和列号。或者直接引用整列:=VLOOKUP(E2, A:B, 2, 0),更省事。
坑3:返回列序号是相对的不是绝对的
很多人以为序号是"第几列"(相对于A列),其实是相对于查找区域的第几列。区域变了,序号就变了。
坑4:近似匹配没排序
用VLOOKUP第四个参数=1(近似匹配)时,查找区域的第一列必须升序排列,否则结果是错的。这个坑踩过的人不少。
坑5:有空格/不可见字符
"张三 "和"张三"看起来一样,但VLOOKUP认为它们不同,返回#N/A。
解决方法:用TRIM函数去掉尾部空格,或者用CLEAN函数去掉不可见字符。=VLOOKUP(TRIM(E2), A:B, 2, 0)
三、XLOOKUP:VLOOKUP的完美替代品
XLOOKUP是Office 365(2021年之后的版本)才有的新函数,完美解决了VLOOKUP的所有痛点。语法更简单:
=XLOOKUP(查找值, 查找列, 返回列, 找不到返回什么)
XLOOKUP vs VLOOKUP 对比
从右往左查:VLOOKUP只能左→右,XLOOKUP可以任意方向。比如根据工号查姓名:=XLOOKUP(E2, B:B, A:A),完美!
默认精确匹配:不需要第四个参数,XLOOKUP默认就是精确匹配。
找不到可以自定义返回:=XLOOKUP(E2, A:A, B:B, "未找到"),比VLOOKUP嵌套IFERROR更简洁。
多行返回:=XLOOKUP(E2, A:A, B:D)可以一次性返回多列(工号、部门、职位),VLOOKUP要写三遍。
不需要锁行号:XLOOKUP用的是两个独立的整列引用,不存在VLOOKUP填充时区域溜走的问题。
XLOOKUP实战
根据姓名查工号:=XLOOKUP("王五", A:A, B:B)
根据工号查姓名(反向查找):=XLOOKUP("G008", B:B, A:A)
根据姓名查工号+部门+职位(多行返回):=XLOOKUP(E2, A:A, B:D)
找不到显示"未找到":=XLOOKUP(E2, A:A, B:B, "未找到")
重要提示:如果公司用的是Office 2019或更早版本,XLOOKUP用不了。这时候用INDEX+MATCH组合代替VLOOKUP也能实现反向查找:
=INDEX(A:A, MATCH(E2, B:B, 0))
意思:在B列找E2的值,返回A列同一行的值。效果等同XLOOKUP,而且所有Excel版本都能用。
四、VLOOKUP/XLOOKUP 10个职场实战案例
案例1:员工表批量查工号
需求:根据姓名批量查工号。
公式:=VLOOKUP(A2, 员工表!A:B, 2, 0) 或 =XLOOKUP(A2, 员工表!A:A, 员工表!B:B)
案例2:根据工号反查姓名
需求:工号在前,姓名在后,VLOOKUP搞不定。
XLOOKUP:=XLOOKUP(B2, 员工表!B:B, 员工表!A:A)
INDEX+MATCH:=INDEX(员工表!A:A, MATCH(B2, 员工表!B:B, 0))
案例3:根据分数查等级(近似匹配)
需求:分数≥90=优,80-89=良,70-79=中,60-69=及格,<60=不及格。
先建一个等级表:A列放边界分数(0,60,70,80,90),B列放等级。然后:
=VLOOKUP(B2, $E$2:$F$6, 2, 1) (第四个参数=1近似匹配,等级表升序排列)
案例4:双条件查找(姓名+部门)
需求:同名不同部门,要同时匹配姓名和部门。
XLOOKUP支持数组:=XLOOKUP(A2&B2, 员工表!A:A&员工表!C:C, 员工表!B:B)
意思:A2&B2合并成一个条件,在A:A&C:C(姓名+部门)里找。
案例5:批量合并两张表
需求:表1有姓名和手机号,表2有姓名和地址,合并成一张完整表。
在表1里加一列,公式:=XLOOKUP(A2, 表2!A:A, 表2!B:B),向下填充,搞定。
案例6:查找并返回多列
需求:根据姓名一次性返回工号、部门、职位三列。
XLOOKUP:=XLOOKUP(A2, 员工表!A:A, 员工表!B:D),一个公式返回三列!
VLOOKUP需要写三个:=VLOOKUP(A2, A:D, 2, 0)、=VLOOKUP(A2, A:D, 3, 0)、=VLOOKUP(A2, A:D, 4, 0)
案例7:找不到返回0而非#N/A
需求:计算公式时#N/A会导致整个公式报错。
XLOOKUP:=XLOOKUP(A2, A:A, B:B, 0)
VLOOKUP:=IFERROR(VLOOKUP(A2, A:B, 2, 0), 0)
案例8:跨多个工作表查找
需求:根据姓名在多个分公司的表里查找工号。
=XLOOKUP(A2, 上海!A:A, 上海!B:B, XLOOKUP(A2, 北京!A:A, 北京!B:B, XLOOKUP(A2, 广州!A:A, 广州!B:B, "未找到")))
一层层嵌套,在多个表里依次查找。
案例9:模糊查找(包含关键词)
需求:查找包含"销售"两个字的部门。
=XLOOKUP("*销售*", A:A, B:B, , 2)
最后一个参数2表示通配符匹配,*是任意字符通配符。
案例10:动态列查找
需求:根据下拉框选择的"工号/部门/职位"动态返回对应列。
=XLOOKUP(A2, 员工表!A:A, XLOOKUP(F2, 员工表!A1:D1, 员工表!A:D))
里面的XLOOKUP根据F2选的内容决定返回A:D的第几列。
五、VLOOKUP vs XLOOKUP 谁该学?
如果你用Office 365:直接学XLOOKUP,抛弃VLOOKUP。简单、强大、没坑。
如果你用Office 2019或更早:VLOOKUP必须会,INDEX+MATCH也必须会(解决VLOOKUP反向查找的问题)。
如果公司电脑版本杂:两个都学,但优先用XLOOKUP,老版本用INDEX+MATCH兜底。
好了,VLOOKUP和XLOOKUP就讲到这里。这两个函数是Excel里最重要的查找函数,学会了能让你的工作效率翻倍。下次有人说"帮我从这张表里找一下",你就能三秒钟搞定。
晚安,打工人。
