在众多 Excel / WPS 表格函数中,VLOOKUP 是当之无愧的"第一函数"。无论是招聘要求还是职场技能清单,VLOOKUP 几乎永远排在函数类技能的最前面。
为什么它这么重要?因为在日常数据处理中,"根据一个值查找另一个值" 是最基础也最高频的需求:
根据员工工号查找姓名和部门。
根据产品编号查找单价和库存。
根据学生学号查找成绩和排名。
根据订单号查找客户信息和物流状态。
这些操作的共同点是:你有一张"查询条件表"(如工号列表),需要从另一张"数据源表"(如员工花名册)中提取对应的信息。手工逐个复制粘贴——200 行数据可能要花半小时,而且容易出错。VLOOKUP 函数——一秒钟完成,零错误。
WPS 表格中的 VLOOKUP 函数与 Excel 完全兼容,语法和使用方式一模一样。这意味着你在 WPS 中学到的 VLOOKUP 技能,在 Excel 中同样适用。
本文将从最基础的语法讲起,结合图文案例,一步步带你掌握 VLOOKUP 函数的用法,并重点讲解跨工作表查找这一核心场景。即使你是零基础,学完本文也能上手使用。
二、VLOOKUP 函数的语法与参数
2.1 函数语法
VLOOKUP 函数的完整语法如下:
=VLOOKUP(查找值, 查找范围, 返回列号, 匹配方式)
四个参数各自的作用:
参数 名称 说明 示例
第一个 查找值 你要搜索的关键词 工号"EMP001"、产品 ID"A100"
第二个 查找范围 包含数据源的区域 A2:D100、Sheet2!A:B
第三个 返回列号 从查找范围的第几列取结果 1=第一列,2=第二列……
第四个 匹配方式 FALSE=精确匹配 / TRUE=近似匹配 通常填 FALSE
2.2 参数详解
查找值(Lookup Value): 你想要查找的关键词。可以是一个具体的值(如 "EMP001"),也可以是对某个单元格的引用(如 A2)。
查找范围(Table Array): 你要在哪里查找。这是一个矩形区域,VLOOKUP 会在该区域的第一列中搜索查找值。请注意:查找值必须在查找范围的第一列,这是 VLOOKUP 最核心的约束条件。如果查找值不在第一列,VLOOKUP 会返回错误。
返回列号(Col Index Number): 找到匹配行后,你想从查找范围的第几列返回结果。例如,查找范围是 A:D 四列,返回列号填 2,则返回 B 列的内容;填 4,则返回 D 列的内容。
匹配方式(Range Lookup): 几乎总是填 FALSE(精确匹配)。FALSE 表示"精确查找",VLOOKUP 会寻找完全等于查找值的记录。TRUE 表示"近似查找",只有在特定场景(如查找税率表对应区间)才使用。
黄金法则: 99% 的情况下,VLOOKUP 的第四个参数都填 FALSE。填错是最常见的错误之一。
三、基础用法:同一工作表中的查找
我们先从一个最简单的例子开始:在同一张工作表中查找数据。
3.1 案例数据
假设你有以下员工信息表(范围 A2:D7):
A(工号) B(姓名) C(部门) D(薪资)
EMP001 张三 市场部 8000
EMP002 李四 研发部 12000
EMP003 王五 财务部 9500
EMP004 赵六 研发部 15000
EMP005 陈七 市场部 8500
EMP006 周八 人事部 9000
3.2 任务:根据工号查找薪资
在 F2 单元格中输入工号 "EMP003",在 G2 单元格中输入以下公式:
=VLOOKUP(F2, A2:D7, 4, FALSE)
公式的解读:
F2 = 要查找的值(EMP003)
A2:D7 = 查找范围
4 = 返回第 4 列(D 列,即"薪资"列)
FALSE = 精确匹配
结果: G2 单元格会显示 9500。
3.3 任务:同时查找姓名、部门和薪资
如果你需要根据工号一次性返回多个信息,可以写多个 VLOOKUP 公式:
单元格 公式 返回
G2 =VLOOKUP(F2, A2:D7, 2, FALSE) 姓名
H2 =VLOOKUP(F2, A2:D7, 3, FALSE) 部门
I2 =VLOOKUP(F2, A2:D7, 4, FALSE) 薪资
将 F2 中的工号改为 "EMP005",G2、H2、I2 会立即显示为 "陈七"、"市场部"、"8500"。
3.4 锁定查找范围(绝对引用)
当你需要向下拖动公式来查找多个工号时,有一个细节必须注意:查找范围会随着公式拖动而改变。
例如,你在 G2 中输入了 =VLOOKUP(F2, A2:D7, 4, FALSE),当你把这个公式向下拖动到 G3 时,公式会变成 =VLOOKUP(F3, A3:D8, 4, FALSE)——查找范围向下移动了一行,导致数据源的范围出错。
解决方法: 使用绝对引用 $A$2:$D$7。带美元符号的行列引用在拖动时不会改变。
正确的公式应该是:
=VLOOKUP(F2, $A$2:$D$7, 4, FALSE)
这样无论你将公式拖到哪一行,查找范围始终固定在 A2:D7。
小技巧: 输入公式时,选中查找范围部分后按 F4 键,WPS 会自动在行列号前添加美元符号,快速切换相对/绝对引用。
四、核心场景:跨工作表查找(跨表 VLOOKUP)
同一工作表中的查找只是基础,实际工作中更常见的是从另一张工作表甚至另一个工作簿中查找数据。
4.1 跨工作表查找的语法
跨表 VLOOKUP 的语法与同表完全一样,只需要在查找范围前加上工作表名称:
=VLOOKUP(查找值, 工作表名!范围, 返回列号, FALSE)
例如,你想从 Sheet2 的 A2:D100 区域中查找数据:
=VLOOKUP(F2, Sheet2!$A$2:$D$100, 3, FALSE)
4.2 实战案例:从员工花名册中提取信息
假设你的工作簿中有两张表:
Sheet1(工资核算表):
A(工号) B(姓名) C(部门) D(基本工资)
EMP001 (空) (空) (空)
EMP002 (空) (空) (空)
…… …… …… ……
Sheet2(员工花名册):
A(工号) B(姓名) C(部门) D(入职日期) E(基本工资)
EMP001 张三 市场部 2023/05/12 8000
EMP002 李四 研发部 2022/08/01 12000
…… …… …… …… ……
需要做的事情: 根据 Sheet1 中的工号,从 Sheet2 中自动填充姓名、部门和基本工资。
操作步骤:
第一步:填写 B2 单元格(查找姓名)
在 Sheet1 的 B2 单元格中输入:
=VLOOKUP($A2, Sheet2!$A$2:$E$100, 2, FALSE)
$A2:查找值是当前行的 A 列(工号),A 前加 $ 锁定列,方便右拖。
Sheet2!$A$2:$E$100:在 Sheet2 的 A2:E100 区域中查找。
2:返回第 2 列,即姓名。
FALSE:精确匹配。
第二步:填写 C2 单元格(查找部门)
在 C2 中输入:
=VLOOKUP($A2, Sheet2!$A$2:$E$100, 3, FALSE)
唯一的变化是返回列号从 2 变成了 3。
第三步:填写 D2 单元格(查找工资)
在 D2 中输入:
=VLOOKUP($A2, Sheet2!$A$2:$E$100, 5, FALSE)
注意这里返回列号是 5,因为 Sheet2 中基本工资在第 5 列。
4.3 高效填充技巧
依次在 B2、C2、D2 中输入公式后,你可以:
选中 B2:D2 三个单元格。
双击 D2 右下角的填充柄(小方块),或者向下拖动填充柄到数据末尾。
所有工号对应的姓名、部门和工资值会瞬间填充完毕。
因为公式中使用了 $A2(锁定 A 列),右拖时不会出错;使用了 Sheet2!$A$2:$E$100(绝对引用),下拖时范围也不会偏移。
4.4 跨工作簿查找
如果需要从另一个独立的 WPS 表格文件中查找数据,语法会稍微不同:
=VLOOKUP(A2, '[员工花名册.xlsx]Sheet1'!$A$2:$E$100, 2, FALSE)
注意:引用的工作簿文件名需要用方括号括起来,整个外部引用用单引号包住。
更简单的做法是:在输入公式时,当光标位于第二个参数(查找范围)时,直接切换到另一个工作簿文件中选中数据范围,WPS 会自动生成正确的引用格式。
五、VLOOKUP 常见的四种错误及解决方法
VLOOKUP 出错时通常会返回特定的错误值。理解这些错误值是排查问题的关键。
5.1 #N/A —— 找不到匹配值
这是最常见的错误。 #N/A 表示 VLOOKUP 在查找范围的第一列中没有找到查找值。
可能的原因:
查找值本身不存在于数据源中(例如工号"EMP999"不在花名册里)。
查找值和数据源中的值格式不一致——一个文字,一个数字。这是最常见的"隐性错误"。
查找值或数据源中有不可见的空格或换行符。
排查与解决:
手动在数据源中搜索一下查找值,看是否存在。
使用 TRIM 函数去除查找值和数据源中可能存在的空格:=VLOOKUP(TRIM(F2), Sheet2!$A$2:$B$100, 2, FALSE)
检查格式:如果查找值是文本格式但数据源中的对应列是数字格式(或反之),使用 -- 或 TEXT 函数统一格式。
5.2 #REF! —— 返回列号超出范围
#REF! 表示你指定的返回列号大于查找范围的实际列数。
例如: 查找范围是 A2:B10(2 列),但你写的返回列号是 3。VLOOKUP 会告诉你:"你让我返回第 3 列,但这个范围总共才 2 列,哪来的第 3 列?"
解决方法: 检查查找范围有多少列,确保返回列号不超过这个数字。
5.3 #VALUE! —— 返回列号小于 1
如果你写的返回列号是 0 或负数,或者不是数字,WPS 会返回 #VALUE!。
解决方法: 确保返回列号是 >=1 的整数。
5.4 结果看起来不对(非错误值)
有时候 VLOOKUP 没有返回错误值,但返回的结果明显不对——例如查到的是另一个人的姓名。
可能的原因: 第四个参数写了 TRUE(近似匹配)但没有对查找范围的第一列排序。
解决方法: 绝大多数情况下,把第四个参数改为 FALSE 即可解决。
六、VLOOKUP 使用中的五个关键注意事项
6.1 查找值必须在查找范围的第一列
这是 VLOOKUP 最核心也最容易被忽视的约束。VLOOKUP 总是在查找范围的第一列中搜索查找值。
错误用法: 查找范围是 B2:D100(B 列是姓名,A 列是工号),而你用工号作为查找值——找不到,因为工号在 A 列,不在 B 列。
解决方法: 将查找范围调整为工号作为第一列的区域,或者重新排列数据列的顺序。
6.2 查找值需与数据源格式一致
文本和数字在 VLOOKUP 看来是不同的值。"123"(文本)和 123(数字)不匹配。
确保一致的方法:
如果查找值是数字但数据源是文本:将查找值乘以 1,转为数字:VLOOKUP(A2*1, Sheet2!A:B, 2, FALSE)
如果查找值是文本但数据源是数字:将查找值转为文本:VLOOKUP(TEXT(A2,"@"), Sheet2!A:B, 2, FALSE)
6.3 使用绝对引用固定查找范围
如前所述,拖动公式时务必使用 $ 符号固定查找范围(如 $A$2:$D$100),否则范围会随拖动偏移。
6.4 VLOOKUP 只能从左向右查询
VLOOKUP 只能返回查找值右侧的列。如果你需要根据姓名查找工号(姓名在右边,工号在左边),VLOOKUP 做不到——因为它要求查找值在第一列,返回列必须在右侧。
替代方案: 使用 INDEX + MATCH 组合,或使用 XLOOKUP 函数(WPS 最新版已支持)。
6.5 VLOOKUP 只返回第一个匹配
如果查找范围中有多个相同的查找值,VLOOKUP 只返回第一个匹配的结果。后面的重复项会被忽略。
如果你的数据源存在重复项,并且你需要返回所有匹配值,需要使用其他方法(如 FILTER 函数或数据透视表)。
七、VLOOKUP 的进阶技巧
7.1 结合 IFERROR 处理错误
当 VLOOKUP 找不到匹配项时返回 #N/A,在正式报表中这很不美观。可以使用 IFERROR 函数将错误替换为自定义提示:
=IFERROR(VLOOKUP(F2, $A$2:$D$100, 4, FALSE), "未找到")
这样,当查找不到时,单元格显示"未找到"而不是难看的 #N/A。
7.2 结合 COLUMN 函数实现横向拖拽自动变列
在前面的跨表案例中,我们在 B2、C2、D2 中分别手动写了返回列号 2、3、5。如果想更高效——写一个公式然后向右拖动——可以结合 COLUMN 函数:
=VLOOKUP($A2, Sheet2!$A$2:$E$100, COLUMN(B1), FALSE)
COLUMN(B1) 返回 2,向右拖动到 C 列时变为 COLUMN(C1) = 3,到 D 列时变为 COLUMN(D1) = 4,依次类推。所有返回值只用这一个公式就能搞定。
7.3 使用 VLOOKUP 做模糊匹配
虽然本文反复强调"用 FALSE",但在一个特殊场景下,TRUE 是正确且必要的——查找区间对应值。
例如,根据销售额查找对应的提成比例:
A(销售额下限) B(提成比例)
0 3%
10000 5%
30000 8%
50000 12%
当销售额为 25000 时,需要找到对应的提成比例 5%。这时使用 TRUE 模式:
=VLOOKUP(25000, $A$2:$B$5, 2, TRUE)
VLOOKUP 会找到小于等于 25000 的最大值(10000),返回对应的提成比例 5%。
注意: 使用 TRUE 模式时,查找范围的第一列必须按升序排序,否则结果会出错。
八、VLOOKUP 与 INDEX+MATCH 的对比
当 VLOOKUP 的局限性(只能从左向右查找、查找值必须在第一列)成为障碍时,INDEX+MATCH 组合是一个更强的替代方案。
对比维度 VLOOKUP INDEX + MATCH
语法复杂度 低 中等
查找方向限制 只能从左向右 无限制(左右上下均可)
新增/删除列的影响 返回列号可能失效 不受影响
查找值位置要求 必须在查找范围第一列 无要求
性能(大数据量) 中等 更优
INDEX+MATCH 的语法:
=INDEX(返回列, MATCH(查找值, 查找列, 0))
例如,根据姓名(在 C 列)查找工号(在 A 列):
=INDEX(A:A, MATCH(F2, C:C, 0))
这个公式先由 MATCH 在 C 列找到 F2(姓名)所在的行号,再由 INDEX 在 A 列返回对应行的工号。不受"从左向右"的限制。
对于大多数日常场景,VLOOKUP 已经足够。当遇到 VLOOKUP 搞不定的情况时,记得还有 INDEX+MATCH 这个后备方案。
九、实战案例整合:从员工信息表到工资核算表
下面用一个完整的实战案例,将本文学到的知识串联起来。
场景: 每月需要根据 HR 提供的员工花名册(Sheet2),在工资核算表(Sheet1)中自动填充每位员工的基本信息,以便计算当月工资。
Sheet1 工资核算表结构:
A(工号) B(姓名) C(部门) D(基本工资) E(奖金) F(应发合计)
EMP001
EMP002
……
Sheet2 员工花名册结构:
A(工号) B(姓名) C(部门) D(入职日期) E(基本工资) F(银行卡号)
EMP001 张三 市场部 2023/05/12 8000 6222****
EMP002 李四 研发部 2022/08/01 12000 6222****
…… …… …… …… …… ……
操作步骤:
在 Sheet1 的 B2 单元格输入:
=VLOOKUP($A2, Sheet2!$A$2:$F$100, 2, FALSE)
在 Sheet1 的 C2 单元格输入:
=VLOOKUP($A2, Sheet2!$A$2:$F$100, 3, FALSE)
在 Sheet1 的 D2 单元格输入:
=VLOOKUP($A2, Sheet2!$A$2:$F$100, 5, FALSE)
选中 B2:D2,双击 D2 的填充柄,将公式向下填充到所有员工。
如果某个工号不在花名册中,VLOOKUP 会返回 #N/A。用 IFERROR 美化一下:
=IFERROR(VLOOKUP($A2, Sheet2!$A$2:$F$100, 2, FALSE), "待确认")
全部完成后,工资核算表中的姓名、部门、基本工资自动填充完毕。你只需要在 E 列填写奖金,F 列用 SUM 求和即可。整个过程从手动操作需要半小时,缩短到了 1 分钟。
十、总结
VLOOKUP 函数之所以成为 Excel / WPS 表格中最重要的函数,是因为它精准地解决了工作中最基础也最高频的需求——在一个数据集中根据条件查找对应的信息。
回顾本文的核心要点:
1. 四参数记牢:
查找值 → 查找范围(第一列必须是查找值所在列)→ 返回列号 → FALSE(精确匹配)
2. 跨表查找就加一个感叹号:
同一工作簿内的跨表:=VLOOKUP(A2, Sheet2!$A$2:$B$100, 2, FALSE)
跨工作簿:在前面加上 [文件名.xlsx]
3. 常见错误对症下药:
#N/A → 检查是否有空格、格式是否一致、值是否存在
#REF! → 返回列号超出了范围列数
结果不对 → 检查第四个参数是否写成了 TRUE
4. 公式一定要用绝对引用($):
使用 $A$2:$D$100 而不是 A2:D100,这样拖动公式时范围不会偏移。
5. VLOOKUP 有局限,但足够日常使用:
无法从右向左查询 → 改用 INDEX+MATCH
只能返回第一个匹配值
查找值必须在第一列
从今天开始,在你的工作中遇到"根据 A 找 B"的场景时,不要手动复制粘贴了——写一个 VLOOKUP 公式,把时间省下来做更有价值的事。当你能在三秒钟之内写出一条 VLOOKUP 公式时,你就超越了 90% 的表格使用者。