引言
Vlookup 函数是 Excel 中极为常用的查找函数,其基本语法为 Vlookup(查找的值,查找区域或数组,返回值所在的列数,精确 or 匹配查找)。它能在表格或数组的首列查找指定的值,并返回指定列的数据,在数据处理中发挥着重要作用。例如在员工信息表中,可快速查找员工的相关信息。
入门篇 - 单条件查找
在员工工资表中,我们要根据员工姓名查找其基本工资。
部门 | 姓名 | 性别 | 年龄 | 基本工资 |
计划部 | 胡苹 | 男 | 21 | 1100 |
计划部 | 江一燕 | 男 | 45 | 3600 |
人事部 | 尚雯婕 | 女 | 26 | 2700 |
人事部 | 汤加丽 | 男 | 25 | 2000 |
生产部 | 王生军 | 女 | 32 | 2600 |
生产部 | 张嘉倪 | 女 | 20 | 1200 |
市场部 | 张小三 | 女 | 19 | 900 |
函数应用 =VLOOKUP(G2,B:E,4,0),其中 G2 是要查找的员工姓名所在单元格,B:E 是查找区域(因为姓名在 B 列,所以从 B 列开始选区域),4 表示基本工资在查找区域的第 4 列,0 表示精确查找。
当在 G2 单元格输入要查找的姓名“江一燕”时,H2 单元格会返回其基本工资 3600,如下表所示:
部门 | 姓名 | 基本工资 |
计划部 | 江一燕 | 3600 |
在这个函数中,查找值为 G2 单元格的内容,查找区域 B:E 涵盖了可能的查找值(姓名)和要返回的结果(基本工资),返回值所在列数 4 准确指向基本工资列,精确查找 0 确保只返回完全匹配“江一燕”的基本工资。
入门篇 - 查找不到时返回空
同样是上述员工工资表,当查找不存在的员工姓名时,不想显示错误值,而是返回空。
部门 | 姓名 | 性别 | 年龄 | 基本工资 |
计划部 | 胡苹 | 男 | 21 | 1100 |
计划部 | 江一燕 | 男 | 45 | 3600 |
人事部 | 尚雯婕 | 女 | 26 | 2700 |
人事部 | 汤加丽 | 男 | 25 | 2000 |
生产部 | 王生军 | 女 | 32 | 2600 |
生产部 | 张嘉倪 | 女 | 20 | 1200 |
市场部 | 张小三 | 女 | 19 | 900 |
函数应用 =IFERROR(VLOOKUP(G2,B:E,4,0),"")。此公式在原 Vlookup 函数基础上,使用 IFERROR 函数将可能出现的错误值转换为空字符串。
若在 G2 单元格输入“赵志东”(表中不存在),H2 单元格将显示为空。
VLOOKUP 函数部分与单条件查找类似,IFERROR 函数的作用是当 VLOOKUP 函数返回错误值时,将其替换为空字符串,从而使表格显示更整洁。
进阶篇 - 反向查找
已知员工工资表,现在要根据员工姓名查找其所在部门,而姓名在第二列,部门在第一列,常规 Vlookup 无法直接实现,需要反向查找。
部门 | 姓名 | 性别 | 年龄 | 基本工资 |
计划部 | 胡苹 | 男 | 21 | 1100 |
计划部 | 江一燕 | 男 | 45 | 3600 |
人事部 | 尚雯婕 | 女 | 26 | 2700 |
函数应用 =VLOOKUP(G2,IF({1,0},B1:B8,A1:A8),2,0)。这里使用 IF({1,0}函数将 B 列(姓名)和 A 列(部门)组合,且把 B 列放在前面,使其符合 Vlookup 从首列查找的规则。
当在 G2 单元格输入“江一燕”时,H2 单元格会返回其所在部门“计划部”。
查找值依然是 G2 单元格的姓名,IF({1,0},B1:B8,A1:A8)构建了一个新的查找区域,其中 B 列在前作为新的首列用于查找,2 表示返回新区域中的第 2 列数据(即部门),0 为精确查找。
进阶篇 - 包含查找
在员工信息表中,查找名字中包含“一”的员工的基本工资。
部门 | 姓名 | 性别 | 年龄 |
计划部 | 胡苹 | 男 | 21 |
计划部 | 江一燕 | 男 | 45 |
人事部 | 尚雯婕 | 女 | 26 |
人事部 | 汤加丽 | 男 | 25 |
生产部 | 王生军 | 女 | 32 |
生产部 | 张嘉倪 | 女 | 20 |
市场部 | 张小三 | 女 | 19 |
函数应用 =VLOOKUP("*"&G2&"*",B:E,4,0)。通过在查找值两边连接通配符*号,实现包含特定字符的查找。
若 G2 单元格输入“江一燕”,则会返回其基本工资 3600。
查找值“*”&G2&“*”表示在 B 列中查找包含 G2 单元格内容(如“江一燕”)的单元格,B:E 为查找区域,4 是返回基本工资所在列,0 是精确查找。
进阶篇 - 区间查找
有如下销售提成表,根据产品销量查找对应的提成比例。
区间点 | 提成 | 销量 |
100 | 3% | 180 |
300 | 5% | |
500 | 7% | |
1000 | 9% |
函数应用 =VLOOKUP(D2,A:B,2,1)。这里最后一个参数为 1,表示匹配查找,会查找比查找值小且最接近
当 D2 单元格输入 180 时,E2 单元格会返回 3%,因为在 A 列中比 180 小且最接近的是 100,其对应的提成是 3%。
查找值为 D2 单元格的销量,A:B 是查找区域,2 表示返回 B 列(提成列)的数据,1 表示匹配查找模式。
进阶篇 - 含通配符的查找
在产品价格表中,根据产品型号查找单价,但型号中含有通配符*,直接使用 Vlookup 会出错。
型号 | 单价 | 销量 | 提成 |
A*100 | 900 | ||
A*900 | 60 | ||
A*3900 | 30 | ||
A*900 | 60 | ||
B*560 | 89 | ||
C*400 | 120 |
函数应用 =VLOOKUP(SUBSTITUTE(D2,"*","~*"),A:B,2,0)。先使用 SUBSTITUTE 函数将*替换为~*,再进行查找。
若 D2 单元格输入“A*900”,则会返回其单价 60。
SUBSTITUTE(D2,"*","~*")将查找值中的*转换为~*,使其能在 A 列中正确匹配,A:B 是查找区域,2 是返回单价所在列,0 是精确查找。
进阶篇 - 横向多列查找
根据员工姓名,在员工信息表中查找其性别、年龄和基本工资。
部门 | 姓名 | 性别 | 年龄 | 基本工资 |
计划部 | 胡苹 | 男 | 21 | 1100 |
计划部 | 江一燕 | 男 | 45 | 3600 |
人事部 | 尚雯婕 | 女 | 26 | 2700 |
人事部 | 汤加丽 | 男 | 25 | 2000 |
生产部 | 王生军 | 女 | 32 | 2600 |
生产部 | 张嘉倪 | 女 | 20 | 1200 |
市场部 | 张小三 | 女 | 19 | 900 |
函数应用 =VLOOKUP($G2,$B:$E,COLUMN(B1),0)。利用 COLUMN 函数生成动态列数作为返回值列数参数,向右复制公式可查找多列。
在 G2 单元格输入“江一燕”,向右拖动公式,H2 单元格会返回性别“男”,I2 单元格返回年龄 45,J2 单元格返回基本工资 3600。
$G2 固定查找值所在单元格,$B:$E 是查找区域,COLUMN(B1)在 B1 单元格时返回 2,向右拖动公式会依次变为 3、4 等,对应查找不同列数据,0 是精确查找。
进阶篇 - 多区域查找
有不同部门的销售数据,根据员工所在部门和姓名从不同区域查询其销售总计。
部门 | 姓名 | 销售总计 |
销售一部 | 张三 | 200000 |
销售二部 | 李四 | 100000 |
销售一部 | 王五 | 100000 |
销售二部 | 孙六 | 100000 |
销售一部 | 李玉 | 200000 |
函数应用 =VLOOKUP(B2,IF(A2="销售一部",A5:B9,D5:E9),2,0)。根据 A2 单元格的部门判断查找区域。
若 A2 单元格为“销售一部”,B2 单元格为“张三”,则会返回其销售总计 200000。
查找值为 B2 单元格的姓名,IF(A2="销售一部",A5:B9,D5:E9)根据部门条件确定查找区域,2 表示返回销售总计所在列,0 是精确查找。
高级篇 - 多条件查找
在员工工资表中,根据部门和姓名查找工资。
部门 | 姓名 | 基本工资 |
计划部 | 胡苹 | 1100 |
计划部 | 江一燕 | 3600 |
人事部 | 江一燕 | 2700 |
人事部 | Excel 精英培训 | 2000 |
生产部 | 兰色幻想 | 2600 |
生产部 | 赵志东 | 1200 |
市场部 | 张小三 | 900 |
函数应用 =VLOOKUP(E2&F2,IF({1,0},A2:A8&B2:B8,C2:C8),2,0)。先将部门和姓名连接作为查找值,再构建新数组作为查找区域。
若 E2 单元格为“人事部”,F2 单元格为“江一燕”,则会返回其工资 2700。
E2&F2 将部门和姓名合并为查找值,IF({1,0},A2:A8&B2:B8,C2:C8)把部门和姓名列组合后与工资列构成新查找区域,2 表示返回工资所在列,0 是精确查找。
高级篇 - 合并单元格查找
在部门奖金表中,查找员工所在部门的奖金,部门列存在合并单元格。
部门 | 奖金 |
生产部 | 600 |
人事部 | 300 |
计划部 | 500 |
人事部 | 300 |
生产部 | 600 |
市场部 | 600 |
生产部 | 600 |
市场部 | 600 |
人事部 | 300 |
生产部 | 600 |
函数应用 =VLOOKUP(VLOOKUP("座",D$2:D2,1),A:B,2,0)。通过 VLOOKUP("座",D$2:D2,1)获取截止本行的最后一个非空部门值,再查找奖金。
若在某单元格输入公式,且所在行的部门列有值(如在第 4 行输入公式,D4 单元格所在合并单元格为“人事部”),则会返回人事部奖金 300。
VLOOKUP("座",D$2:D2,1)在 D 列从第 2 行开始查找“座”,返回截止本行的最后一个非空值(即部门名),A:B 是查找奖金的区域,2 表示返回奖金所在列,0 是精确查找。
高级篇 - 带合并单元格的多条件查找
在产品价格表中,根据公司和产品查找对应价格,公司列存在合并单元格。
产品 | 价格 | 部门 |
洗衣机 | 5000 | A 公司 |
电视 | 3000 | A 公司 |
空调 | 2000 | A 公司 |
洗衣机 | 7000 | B 公司 |
电视 | 4000 | B 公司 |
冰箱 | 8000 | B 公司 |
洗衣机 | 12000 | C 公司 |
电视 | 6600 | C 公司 |
空调 | 5000 | C 公司 |
函数应用 =VLOOKUP(F2,OFFSET(B$1,MATCH(E2,A:A,)-1,):C99,2,0)。利用 MATCH 函数查找公司所在行数,再用 OFFSET 函数构建动态查找区域。
若 E2 单元格为“B 公司”,F2 单元格为“洗衣机”,则会返回价格 7000。
F2 为查找值(产品),MATCH(E2,A:A,)-1 查找公司在 A 列的行数并减 1,OFFSET(B$1,MATCH(E2,A:A,)-1,):C99 根据公司行数构建从 B1 开始的动态查找区域,2 表示返回价格所在列,0 是精确
F2 为查找值(产品),MATCH(E2,A:A,)-1 查找公司在 A 列的行数并减 1,OFFSET(B$1,MATCH(E2,A:A,)-1,):C99 根据公司行数构建从 B1 开始的动态查找区域,2 表示返回价格所在列,0 是精确查找。
高级篇 - 一对多查找
在员工信息表中,查找人事部所有员工。
部门 | 姓名 | 基本工资 |
计划部 | 胡苹 | 1100 |
计划部 | 江一燕 | 3600 |
人事部 | 江一燕 | 2700 |
人事部 | Excel 精英培训 | 2000 |
生产部 | 兰色幻想 | 2600 |
生产部 | 赵志东 | 1200 |
市场部 | 张小三 | 900 |
函数应用 {=VLOOKUP(E$2&ROW(A1),IF({1,0},A$2:A$8&COUNTIF(INDIRECT("a2:a"&ROW($2:$8)),E$2),B$2:B$8),2,0)}。此为数组公式,输入后按 Ctrl+shift+enter 结束。
在指定单元格输入公式后,会依次返回人事部员工“江一燕”“Excel 精英培训”等(向下拖动公式可显示全部)。
E$2&ROW(A1)将部门和动态行号连接作为查找值,ROW($2:$8)生成 2 - 8 的行号,INDIRECT("a2:a"&ROW($2:$8))生成不同行数的区域,COUNTIF(INDIRECT)在这些区域计算部门个数为人事部员工编号,IF({1,0}将编号后的部门和姓名列组合成新数组,2 表示返回姓名所在列,0 是精确查找。
高级篇 - 查找所有值放在一个单元格
在产品销售价格表中,根据产品从左表中查找所有符合条件的价格并用逗号隔开。
年份 | 产品 | 销售价格 |
2011 年 | A | 34 |
2012 年 | B | 35 |
2013 年 | A | 31 |
2014 年 | A | 62 |
2015 年 | C | 54 |
2016 年 | B | 68 |
2017 年 | A | 79 |
2018 年 | B | 4 |
2019 年 | A | 29 |
2020 年 | B | 36 |
函数应用 E2=D2&","&IFERROR(VLOOKUP(C2,C3:E$12,3,),"");G2=VLOOKUP(F2,C:E,3,)'。
若在 F2 单元格输入“A”,G2 单元格会返回 A 产品的所有价格“34,31,62,79,29”(假设 E 列已按公式计算)。
在 E2 单元格公式中,D2&","&IFERROR(VLOOKUP(C2,C3:E$12,3,),"")先取 D2 单元格内容并连接逗号,再用 VLOOKUP 查找 C2 单元格产品的价格,若找不到则返回空,最后连接起来;G2 单元格公式 VLOOKUP(F2,C:E,3,)' 直接查找 F2 单元格产品在 C:E 区域的价格。
高级篇 - 查找最后一个
在产品进货价格表中,查找 A 产品最后一次进货价格。
日期 | 产品 | 进货价格 |
2019-9-14 | A | 5 |
2019-10-1 | A | 7 |
2019-11-1 | A | 8 |
2019-12-1 | A | 6 |
2020-1-1 | B | 9 |
2020-2-1 | B | 10 |
2020-3-1 | A | 9 |
2020-4-1 | A | 12 |
2020-5-1 | A | 10 |
2020-6-1 | B | 11 |
函数应用 =VLOOKUP(1,IF({100,0},0/(B2:B10="A"),C2:C10),2)。利用 0/(条件)将不符合条件的变为错误值,符合条件的变为 0,再用 1 查找最后一个符合条件的值。
会返回 A 产品最后一次进货价格 10。
查找值 1 用于查找满足条件的最后一个值,IF({100,0},0/(B2:B10="A"),C2:C10)中,0/(B2:B10="A")将 B 列中不是 A 的单元格变为错误值,是 A 的变为 0,然后与 C 列组成新的查找区域,2 表示返回进货价格所在列。
Office365 中的新用法 - 批量查找
在员工信息表中,同时查找多个员工的工资。
部门 | 姓名 | 基本工资 |
计划部 | 胡苹 | 1100 |
计划部 | 江一燕 | 3600 |
人事部 | 江一燕 | 2700 |
人事部 | Excel 精英培训 | 2000 |
生产部 | 兰色幻想 | 2600 |
生产部 | 赵志东 | 1200 |
市场部 | 张小三 | 900 |
函数应用 =VLOOKUP(d2:d12,A:B,2,0)。在 Office365 中,可直接对区域进行批量查找。
在 D2:D12 单元格区域输入多个员工姓名,会在对应的单元格返回其工资。
D2:D12 是查找值区域,A:B 是查找区域,2 表示返回基本工资所在列,0 是精确查找。
Office365 中的新用法 - 多列查找
在员工信息表中,同时查找多个员工的姓名、部门和工资。
部门 | 姓名 | 基本工资 |
计划部 | 胡苹 | 1100 |
计划部 | 江一燕 | 3600 |
人事部 | 江一燕 | 2700 |
人事部 | Excel 精英培训 | 2000 |
生产部 | 兰色幻想 | 2600 |
生产部 | 赵志东 | 1200 |
市场部 | 张小三 | 900 |
函数应用 =VLOOKUP(A11,A1:E7,{2,3,5},0)。通过指定{2,3,5}作为返回列数,可一次查找多列数据。
在 A11 单元格输入员工姓名,会在对应的单元格返回其姓名、部门和工资。
A11 是查找值,A1:E7 是查找区域,{2,3,5}分别对应姓名、部门和工资所在列,0 是精确查找。
通过以上对 Vlookup 函数全面而详细的讲解,相信大家对这个强大的函数有了更深入的理解和掌握。无论是基础的单条件查找,还是复杂的多条件、反向查找等,都能轻松应对。希望大家在实际工作中多多运用,提高数据处理效率。如果您觉得这篇内容对您有帮助,别忘了点赞、转发和关注我们,让更多的人受益于这些实用的办公技巧!