跳到主要内容

vlookup

一、VLOOKUP函数基础​

1.用途​

根据首列的值,在表中垂直向下查找并返回右侧单元格的值。

  1. 只能向右查
  2. 查找值必须在第一列

2.函数语法​

=VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])

3.参数详解​

  • lookup_value 必需。要查找的值
  • table_array 必需。查找区域(包含要查找的值和返回值的区域)
  • col_index_num 必需。返回值在查找区域中的列号
  • range_lookup 可选。匹配类型:TRUE=近似匹配,FALSE=精确匹配。默认为TRUE

4.工作原理​

查找过程:在table_array的第一列中查找lookup_value
↓
找到后向右移动col_index_num-1列
↓
返回该单元格的值

二、详细示例数据表​

表1:员工基本信息表(数据源)​

员工ID姓名部门入职日期基本工资职级
E001张明技术部2018-03-158000P7
E002李华销售部2019-07-207500P6
E003王芳人事部2020-01-107000P5
E004赵强财务部2017-05-188500P8
E005孙丽技术部2019-11-307800P6
E006周伟市场部2021-03-257200P5
E007吴刚销售部2018-09-128200P7
E008郑洁技术部2020-08-227600P6
E009钱勇财务部2019-04-147900P6
E010王静人事部2022-01-056800P4

表2:部门信息表​

部门代码部门名称部门经理办公地点预算(万元)
DEP01技术部张三丰A栋301500
DEP02销售部李思思B栋202800
DEP03人事部王五C栋101200
DEP04财务部赵六D栋401300
DEP05市场部周七B栋102400

表3:职级工资标准表​

职级基础工资绩效系数交通补贴餐补
P460001.0500300
P570001.1600400
P680001.2700500
P790001.3800600
P8100001.4900700
P9120001.51000800

表4:产品销售表​

订单号产品编码销售日期销售数量单价销售员ID
ORD001P10012024-01-055299E002
ORD002P10022024-01-063899E007
ORD003P10032024-01-0810199E002
ORD004P10012024-01-102299E007
ORD005P10042024-01-1211599E002
ORD006P10022024-01-154899E007
ORD007P10052024-01-186599E002
ORD008P10032024-01-208199E007
ORD009P10012024-01-223299E002
ORD010P10042024-01-2521599E007

表5:产品信息表​

产品编码产品名称类别成本价供应商库存量
P1001iPhone 15手机2500苹果150
P1002华为P60手机2200华为80
P1003小米手环配件150小米300
P1004MacBook Pro电脑12000苹果50
P1005华为平板平板1800华为120
P1006三星电视家电4000三星60
P1007索尼耳机配件800索尼200

三、VLOOKUP基础应用​

示例1:简单查找(精确匹配)​

需求:根据员工ID查找姓名

在表1旁边创建查询表:
A列:要查找的员工ID
B列:输入公式查找姓名

公式:
=VLOOKUP(A2, 表1!A:F, 2, FALSE)

解释:
- A2:要查找的员工ID(如"E003")
- 表1!A:F:在表1的A到F列查找
- 2:返回查找区域中的第2列(姓名列)
- FALSE:精确匹配

结果示例:

查询ID返回姓名
E003王芳
E005孙丽
E008郑洁

示例2:跨表查询​

需求:在销售表中根据销售员ID查找姓名

在销售表(表4)中添加G列"销售员姓名":
=VLOOKUP(F2, 表1!A:B, 2, FALSE)

解释:
- F2:销售员ID
- 表1!A:B:在员工表的A:B列查找
- 2:返回第2列(姓名)

结果:

订单号销售员ID销售员姓名
ORD001E002李华
ORD002E007吴刚

示例3:查找多列信息​

需求:根据员工ID一次性查找姓名和部门

姓名列:=VLOOKUP(A2, 表1!A:C, 2, FALSE)
部门列:=VLOOKUP(A2, 表1!A:C, 3, FALSE)

或者使用COLUMN()函数动态引用:
姓名列:=VLOOKUP($A2, 表1!$A:$F, COLUMN(B1), FALSE)
向右拖动时自动变为:
部门列:=VLOOKUP($A2, 表1!$A:$F, COLUMN(C1), FALSE)

四、VLOOKUP进阶应用​

示例4:近似匹配(区间查找)​

需求:根据销售额计算提成比例(使用区间表)

提成标准表:​

销售额下限提成比例
05%
100008%
5000010%
10000015%
20000020%

公式:

=VLOOKUP(销售额, 提成表!A:B, 2, TRUE)

注意:必须使用TRUE进行近似匹配
查找表第一列必须按升序排列

实际应用:

假设销售额在G2单元格:
=G2 * VLOOKUP(G2, 提成表!A:B, 2, TRUE)

示例5:结合IFERROR处理错误​

需求:查找产品信息,找不到时显示"无记录"

=VLOOKUP(A2, 产品表!A:F, 2, FALSE)
会返回#N/A错误如果找不到

改进:
=IFERROR(VLOOKUP(A2, 产品表!A:F, 2, FALSE), "无记录")

或者:
=IFERROR(VLOOKUP(A2, 产品表!A:F, 2, FALSE),
VLOOKUP(A2, 备用表!A:F, 2, FALSE))

示例6:多条件查找​

需求:根据部门和职级查找对应的薪资标准

方法1:创建辅助列​

在薪资标准表中添加辅助列(A列):
=A2&B2 // 连接部门和职级

查找公式:
=VLOOKUP(部门&职级, 薪资表!A:E, 5, FALSE)

方法2:使用数组公式(旧版本Excel)​

=INDEX(薪资表!E:E,
MATCH(1, (薪资表!A:A=部门)*(薪资表!B:B=职级), 0))
按Ctrl+Shift+Enter输入

方法3:使用XLOOKUP或FILTER(新版本Excel)​

=XLOOKUP(部门&职级, 薪资表!A:A&薪资表!B:B, 薪资表!E:E)

示例7:反向查找(查找值在右侧)​

需求:根据姓名查找员工ID(姓名在ID的右侧)

方法1:重组数据区域​

=VLOOKUP(姓名,
CHOOSE({1,2}, 表1!B:B, 表1!A:A),
2, FALSE)

解释:CHOOSE函数创建新数组,将B列(姓名)放在第一列

方法2:使用INDEX+MATCH(推荐)​

=INDEX(表1!A:A, MATCH(姓名, 表1!B:B, 0))

五、VLOOKUP常见错误及解决​

错误1:#N/A 错误​

原因:找不到查找值
解决:
1. 检查查找值是否存在
2. 检查是否使用了精确匹配(FALSE)
3. 检查数据是否有空格:=TRIM(A1)
4. 检查数据类型是否一致(文本vs数字)

错误2:#REF! 错误​

原因:col_index_num超出范围
解决:检查列索引号是否小于等于table_array的列数

错误3:#VALUE! 错误​

原因:col_index_num小于1
解决:确保列索引号≥1

错误4:返回错误的值​

原因:使用了近似匹配(TRUE)但数据未排序
解决:
1. 对查找区域第一列升序排序
2. 或改用精确匹配(FALSE)

错误5:查找区域不正确​

原因:table_array未固定引用
解决:使用绝对引用
=VLOOKUP(A2, $A$2:$F$100, 2, FALSE)
或命名区域

六、VLOOKUP最佳实践​

1. 使用表格结构化引用​

将数据区域转为Excel表格(Ctrl+T)
使用:=VLOOKUP(A2, Table1, 2, FALSE)

2. 使用名称管理器​

定义名称:员工数据 = 表1!$A$2:$F$100
公式:=VLOOKUP(A2, 员工数据, 2, FALSE)

3. 动态列索引​

=MATCH("姓名", 表1!$A$1:$F$1, 0) // 返回姓名列的序号
=VLOOKUP(A2, 表1!$A:$F,
MATCH("姓名", 表1!$A$1:$F$1, 0), FALSE)

4. 批量查找​

在G2输入:=VLOOKUP($F2, $A$2:$E$100, COLUMN(B1), FALSE)
向右拖动填充其他列

5. 使用通配符​

查找包含"苹果"的产品:
=VLOOKUP("*苹果*", 产品表!B:F, 2, FALSE)

查找以"iPhone"开头的产品:
=VLOOKUP("iPhone*", 产品表!B:F, 2, FALSE)

七、综合实战案例​

案例1:创建员工工资查询系统​

步骤1:建立查询界面​

项目内容
员工ID(输入框)
员工姓名(公式计算)
部门(公式计算)
基本工资(公式计算)
职级(公式计算)
标准基础工资(从职级表获取)
绩效系数(从职级表获取)
应发工资(公式计算)

步骤2:编写公式​

B2(员工姓名):=VLOOKUP(A2, 表1!A:F, 2, FALSE)
B3(部门):=VLOOKUP(A2, 表1!A:F, 3, FALSE)
B4(基本工资):=VLOOKUP(A2, 表1!A:F, 5, FALSE)
B5(职级):=VLOOKUP(A2, 表1!A:F, 6, FALSE)
B6(标准基础工资):=VLOOKUP(B5, 表3!A:E, 2, FALSE)
B7(绩效系数):=VLOOKUP(B5, 表3!A:E, 3, FALSE)
B8(应发工资):=B6 * B7 + VLOOKUP(B5, 表3!A:E, 4, FALSE) + VLOOKUP(B5, 表3!A:E, 5, FALSE)

案例2:销售业绩分析报表​

步骤1:扩展销售表​

在销售表(表4)中添加以下列:

  • G列:销售员姓名
  • H列:产品名称
  • I列:产品类别
  • J列:成本价
  • K列:销售金额
  • L列:利润

步骤2:编写公式​

G2(销售员姓名):=VLOOKUP(F2, 表1!A:B, 2, FALSE)
H2(产品名称):=VLOOKUP(B2, 表5!A:F, 2, FALSE)
I2(产品类别):=VLOOKUP(B2, 表5!A:F, 3, FALSE)
J2(成本价):=VLOOKUP(B2, 表5!A:F, 4, FALSE)
K2(销售金额):=D2 * E2
L2(利润):=K2 - (J2 * D2)

案例3:库存预警系统​

步骤1:创建库存状态表​

产品编码产品名称当前库存安全库存日均销量可售天数状态

步骤2:编写公式​

B2(产品名称):=VLOOKUP(A2, 表5!A:F, 2, FALSE)
C2(当前库存):=VLOOKUP(A2, 表5!A:F, 6, FALSE)
D2(安全库存):手动输入或从其他表获取
E2(日均销量):从销售统计获取
F2(可售天数):=C2/E2
G2(状态):=IF(F2<3, "紧急",
IF(F2<7, "警告",
IF(F2<15, "关注", "正常")))

八、VLOOKUP的局限性及替代方案​

1. VLOOKUP的局限性​

  • 只能从左向右查找
  • 查找值必须在第一列
  • 处理大量数据时较慢
  • 不支持多条件查找(需辅助列)

2. 替代函数对比​

函数优点缺点适用场景
INDEX+MATCH灵活,可左右查找,速度快公式稍复杂复杂查找,反向查找
XLOOKUP功能强大,简单易用Excel 2019+新版Excel用户
FILTER返回多个结果,动态数组Excel 365+筛选多个匹配项
HLOOKUP水平查找使用较少横向表格

3. INDEX+MATCH示例​

代替VLOOKUP:=INDEX(返回列, MATCH(查找值, 查找列, 0))

示例:根据姓名查找部门
=INDEX(表1!C:C, MATCH(A2, 表1!B:B, 0))

4. XLOOKUP示例​

基本用法:=XLOOKUP(查找值, 查找数组, 返回数组)
多条件:=XLOOKUP(1, (部门="技术部")*(职级="P7"), 工资)

九、性能优化建议​

1. 限制查找范围​

不好:=VLOOKUP(A2, A:F, 2, FALSE) // 整列引用
好:=VLOOKUP(A2, A2:F1000, 2, FALSE) // 指定范围

2. 排序数据(使用近似匹配时)​

对查找区域第一列升序排序,使用TRUE提高速度

3. 使用辅助列​

将常用查找结果存为辅助列,避免重复计算

4. 批量处理​

使用数组公式一次计算多个结果

十、练习题目​

基础练习​

  1. 根据员工ID查找入职日期
  2. 根据产品编码查找供应商
  3. 根据部门代码查找部门经理
  4. 根据职级查找交通补贴

中级练习​

  1. 创建产品销售报表,包含产品信息和销售员信息
  2. 计算每个销售员的销售总额
  3. 查找库存量低于安全库存的产品
  4. 根据销售额区间计算提成

高级练习​

  1. 创建动态查询系统,可切换查询条件
  2. 实现多级下拉菜单联动查询
  3. 构建员工信息仪表板
  4. 设计库存预警自动报告

挑战练习​

  1. 使用VLOOKUP实现类似SQL的JOIN操作
  2. 创建模糊查询系统(支持部分匹配)
  3. 实现数据验证和错误处理一体化
  4. 优化大数据量下的查找性能

十一、常见问题FAQ​

Q1:VLOOKUP能查找多个条件吗?​

A:不能直接查找,需要创建辅助列或将条件合并:

辅助列:=A2&B2&C2
查找:=VLOOKUP(条件1&条件2&条件3, 查找区域, 列号, FALSE)

Q2:如何让VLOOKUP返回多个结果?​

A:VLOOKUP只能返回第一个匹配结果。如需返回多个,使用:

FILTER()函数(Excel 365)
或
使用辅助列+筛选

Q3:VLOOKUP查找不到明明存在的数据?​

A:常见原因:

  1. 数据类型不一致(文本vs数字)
  2. 存在空格或不可见字符
  3. 查找区域引用错误
  4. 未使用精确匹配

Q4:VLOOKUP和HLOOKUP有什么区别?​

A:VLOOKUP垂直查找,HLOOKUP水平查找。其他参数类似。

Q5:什么时候用VLOOKUP,什么时候用INDEX+MATCH?​

A:简单从左向右查找用VLOOKUP;复杂查找、反向查找、需要灵活性时用INDEX+MATCH。


十二、总结​

VLOOKUP是Excel中最重要、最常用的函数之一。掌握它需要:

  1. 理解四个参数的作用
  2. 区分精确匹配和近似匹配
  3. 学会处理常见错误
  4. 掌握与其他函数组合使用
  5. 了解其局限性及替代方案

记忆口诀:

VLOOKUP四参数,查找值和区域
列号别写错,匹配要记住
精确用FALSE,近似TRUE
数据要规范,错误及时处