
一、什么场景该用VLOOKUP
很多做表格的人都遇到过这样的场景:一张工资表里有员工工号,另一张员工信息表里才有对应的部门、基本工资,要把两张表的数据合并到一张表里,你还在一个个手动搜索、复制、粘贴吗?数据少还好说,一旦有几十几百行,这样人肉配对既慢又容易错。
这时候就该用 VLOOKUP 函数了。它的用途很明确:在一个表格或区域里,按行查找某个值,然后返回这一行里指定列对应的数据。VLOOKUP 里的 V 代表垂直(Vertical),意思是按列从上往下找。典型使用场景比如:按员工工号查姓名、按产品编号查价格、按订单号查金额、按班级查班主任等。
一句话概括它的逻辑:我想拿这个值去一个区域里找,找到后把这一行里第几列的值带回来。它是 Excel 和 WPS 表格里最高频的查找函数之一,语法和参数行为在两个软件里完全一致。下面我们先把它的四个参数看懂,再一步步写出公式。
二、先搞懂四个参数,一张表看懂
VLOOKUP 的完整语法是:
=VLOOKUP(查找值, 查找区域, 返回列号, [匹配方式])
四个参数各司其职,缺一不可(第四个可以省略,但不建议省略)。下面这张表帮你快速理解每个参数的作用和最容易犯的错:
| 参数 | 作用 | 最容易错的地方 |
| 查找值 | 你要拿着去查找的那个值,可以是单元格引用或直接输入的文本、数字 | 文本要加英文双引号;查找值两侧有隐藏空格会查不到 |
| 查找区域 | 在这个区域内从上往下查找并取数 | 查找值必须位于区域的最左一列,否则返回错误 |
| 返回列号 | 要返回的是区域里第几列的值 | 从区域第一列开始数,不是从工作表A列开始数 |
| 匹配方式 | 写0/FALSE是精确匹配,写1/TRUE是近似匹配 | 绝大多数场景用精确匹配,别漏写导致默认近似 |
核心三个硬限制:第一,查找值必须位于查找区域的第一列;第二,返回列号是从区域的第一列开始数,而不是从工作表的 A 列开始数;第三,绝大多数日常场景用精确匹配(0/FALSE),模糊匹配要求区域第一列先按升序排好,否则结果不可控。
搞清楚这三个限制,VLOOKUP 就成功了一大半。下面我们用一个具体例子,把公式一步步敲出来。
三、Excel里一步步输入VLOOKUP
我们用办公室最常用的例子:员工信息表里有工号、姓名、部门、基本工资,现在要根据工号自动查出对应的基本工资。
假设:A2 单元格里填了要查的工号,源数据工号到工资在 A2:D50 区域(A是工号、B是姓名、C是部门、D是工资)。目标是让目标单元格显示这个工号对应的工资。
操作步骤
第一步,点选要显示结果的单元格(比如 G2),在公式栏输入 =VLOOKUP(。
第二步,填第一个参数查找值:直接点选 A2,公式变成 =VLOOKUP(A2,。当然也可以直接输入文本,比如 =VLOOKUP("E003",,注意文本要用英文双引号括起来。
第三步,填第二个参数查找区域:框选 A2:D50,如果区域在别的表,可以切换到那张表再框选。公式变成 =VLOOKUP(A2,A2:D50,。
第四步,填第三个参数返回列号:工资在 D 列,而区域从 A 列数起,A是第1列、B是第2列、C是第3列、D是第4列,所以这里填 4。公式变成 =VLOOKUP(A2,A2:D50,4,。
第五步,填第四个参数匹配方式:填入 0 表示精确匹配,按回车键。完整公式为 =VLOOKUP(A2,A2:D50,4,0),工资就查出来了。
第六步,如果需要批量查多个工号,把公式向下拖动填充即可。但注意,拖动前要把查找区域改成绝对引用,具体我们第四节讲。
四、跨表和跨工作簿引用怎么写
VLOOKUP 最大的价值就在于跨表查找。VLOOKUP 的查找区域不一定要在当前工作表,完全可以是另一个工作表甚至另一个工作簿(文件),这就是最大的两个坑之一。
跨工作表引用,只需要在区域前加上工作表名和英文感叹号:
=VLOOKUP(A2, Sheet2!$A$1:$D$50, 4, 0)
意思是去 Sheet2 工作表的 A1:D50 区域里,按 A2 的值精确匹配,返回第4列。注意工作表名和区域之间要加一个英文感叹号“!”,这个感叹号分隔了「工作表名」和「单元格区域」。
跨工作簿(跨文件)引用写法类似,把方括号里的文件名也带上,比如:
=VLOOKUP(A2, [工资表.xlsx]Sheet1!$A$2:$D$200, 3, 0)
关键提醒:跨文件引用时,被引用的源文件必须保持打开状态,否则 VLOOKUP 可能返回 #REF 或无法自动更新结果。Excel 和 WPS 在这个行为上是一致的——关闭源文件后公式虽然还在,但重新计算时依赖源文件能否被访问。所以日常使用中建议:要么把需要匹配的源数据复制到同一个工作簿,要么保持源文件打开再查。
另外,如果你用的是 WPS 云文档或在线协作表格,跨文件引用还要注意协作者是否有源文件的查看权限,权限不足时公式可能无法取到最新数据。
五、拖动填充一定要锁定区域(绝对引用)
这是新手最常犯、也最容易踩的坑:明明第一个工号查对了,一向下拖动填充,后面全部查错。原因很简单——查找区域没有用绝对引用锁定。
当你向下拖动公式时,Excel/WPS 会默认把相对引用一起往下偏移。第一行公式是 =VLOOKUP(A2,A2:D50,4,0),拖到第三行就变成 =VLOOKUP(A4,A4:D52,4,0),查找区域从 A2:D50 悄悄偏移成了 A4:D52,每一行实际查找的范围都不一样,自然容易出错。
解决办法:给查找区域的行号和列号都加上美元符号 $,写成 $A$2:$D$50,这样无论把公式拖到哪里,查找区域都固定不动。快速做法是:选中公式里的查找区域,然后按一次 F4 键,Excel/WPS 会自动帮你加上绝对引用符号。
需要说明的是:绝对引用要锁定的是「查找区域」,查找值本身(如 A2)通常保持相对引用即可,因为你就是要让它每一行跟着变,去查对应行的工号。别把两者弄反了。
六、精确匹配还是近似匹配
第四个参数 range_lookup 决定 VLOOKUP 用精确匹配还是近似匹配:写 0 或 FALSE 表示精确匹配,写 1 或 TRUE 表示近似匹配,什么都不写则默认按近似匹配处理。
精确匹配(0):要求查找值和区域第一列的内容完全一致,找不到就返回 #N/A。适合按工号、身份证号、产品编码、订单号这类「一对一」的数据去查,绝大多数办公场景都用它。
近似匹配(1):在找不到完全一致的值时,返回「小于等于查找值的最大值」。它适合数值区间的匹配,比如成绩换算等级、收入套税率、销量对应折扣等。注意,用近似匹配时,区域第一列必须先按升序(从小到大)排好,否则结果不可预测。
举个近似匹配的例子:=VLOOKUP(90, A1:B100, 2, TRUE),如果 A 列里没有正好等于 90 的分界值,VLOOKUP 就会返回小于等于 90 的最大那个分界值所对应的等级。做成绩等级对应、税率阶梯计算时特别方便。
一句话建议:不确定的时候,就老老实实写 0 用精确匹配,别留空让它走默认的近似匹配。
七、常见报错排查表
VLOOKUP 报错看着多,其实根因就集中在参数理解错误和数据不规范上。按「值是否存在→是否有空格或格式差异→区域引用是否正确」三步排查,绝大多数问题都能解决。下表列出最常见的几种报错:
| 报错 | 原因 | 解决办法 |
| #N/A | 查找值在区域第一列里找不到,或两边有隐藏空格、格式不一致 | 用 Ctrl+F 确认值存在;用 TRIM 清理空格;统一数字/日期格式 |
| #REF! | 返回列号大于了查找区域的总列数 | 确认区域有几列,把返回列号改到有效范围内 |
| #VALUE! | 返回列号小于1,或区域取值不合法 | 确保返回列号大于等于1,检查区域引用 |
| #NAME? | 文本查找值忘记加英文双引号 | 给公式里的文本用英文引号包起来,如 "张三" |
| #SPILL! | 用整列做引用时触发了隐式交集问题 | 把查找引用用 @ 锚定,或用 A2 这样的单格引用 |
| 向下拖动后结果都错 | 查找区域没加 $ 绝对引用,随着拖动偏移了 | 选中查找区域按 F4 锁定为 $A$2:$D$50 |
其中 #N/A 是最高频的报错。排查三个要点:第一,用筛选或 Ctrl+F 在查找区域第一列搜一下,确认值是否真的存在;第二,用 TRIM 函数清理查找值和查找区域里的多余空格——这是肉眼看着一样却查不到的最常见原因;第三,检查两边数据格式是否一致,文本型数字和数值型数字在 VLOOKUP 看来是不同的值。另外,要避免把数字或日期存成文本,这会让查找返回不正确或意外的结果。
八、三个让VLOOKUP更好用的进阶技巧
技巧一:用IFERROR优雅处理查不到
实际工作中数据源不完整是常态,有的工号在源表里确实查不到,VLOOKUP 会返回 #N/A,污染后续的求和汇总。用 IFERROR 包一层就能优雅处理:
=IFERROR(VLOOKUP(F2,$A$2:$D$50,4,0),0)
这样查不到时返回 0 而不是报错,方便直接参与求和;把 0 换成「查无此人」等中文也能显示提示文字,表格更友好。
技巧二:用通配符做模糊查找
在精确匹配模式下,VLOOKUP 同样支持通配符:问号 ? 匹配任意单个字符,星号 * 匹配任意一串字符。比如想找所有姓「王」的员工,可以写:
=VLOOKUP("王*",$A$2:$D$50,2,0)
这在处理数据不规范、只记得关键字时非常有用。注意,如果真的要查找文本里的问号或星号本身,要在它前面加代字号 ~。
技巧三:配合MATCH实现动态列
当返回的列不固定时(有时查工资、有时查部门),可以把第三个参数换成一个 MATCH 函数来自动定位列序号:
=VLOOKUP(F2,$A$2:$D$50,MATCH("工资",$A$1:$D$1,0),0)
MATCH 会在第1行里自动找到「工资」在第几列,VLOOKUP 再按这个列号取值。模板化报表里很实用,改了表头列序公式也能自动适配。
另外还值得了解:如果你要查找的值不在区域最左列,VLOOKUP 就无能为力了(它只能从左往右找)。这时可以用 INDEX+MATCH 组合代替,或者改用新版 Excel/WPS 提供的 XLOOKUP 函数,它在任何方向都能查找、默认精确匹配,比 VLOOKUP 更好用、更方便。
九、小结
VLOOKUP 是 Excel 和 WPS 表格里按行查找数据的主力函数,用来在两表间自动配对数据,告别手动复制粘贴。写公式前先记住四个参数:查找值、查找区域、返回列号、匹配方式;再记住三个硬限制:查找值必须在区域第一列、返回列号从区域第一列起算、绝大多数场景用精确匹配写 0。跨表查找时在区域前加工作表名和感叹号(Sheet2!$A$1:$D$50),跨文件引用则要保证源文件打开。向下拖动批量填充前,一定给查找区域按 F4 加 $ 绝对引用锁定,否则区域会跟着偏移导致全部查错。遇到报错按「值是否存在→空格与格式→区域引用」三步排查,重点清理隐藏空格、统一文本/数值格式。再配合 IFERROR 兜底、通配符模糊查找、MATCH 动态列,以及更适合反向查找的 INDEX+MATCH 和 XLOOKUP,就能把表格配对这件事做得又快又稳。掌握 VLOOKUP,跨表汇总数据就不再是让人头疼的事。











