VLOOKUP 与查找匹配
[TOC] [TOC]
两张表之间搬数据,是 Excel 里最高频也最容易翻车的操作。成绩表里只有学号,姓名在另一张花名册里;销售表里只有工号,提成比例在另一张参数表里。VLOOKUP 就是专门解决这类问题的函数:按一个共同字段,把另一张表的内容搬过来。
四个参数一个一个填
VLOOKUP 的句式是 =VLOOKUP(找谁,在哪找,取第几列,怎么找)。举个例子,A 列是学号,花名册在 Sheet2,想按学号取姓名:
=VLOOKUP(A2,Sheet2!$A$1:$D$100,2,0)
四个参数一个一个翻译:
| 参数位置 | 填什么 | 上例中的写法 | 作用 |
|---|---|---|---|
| 第一参数 | 要匹配的值 | A2 | 按这一格的值去找 |
| 第二参数 | 查找区域 | Sheet2!$A$1:$D$100 | 只能在这片区域里找 |
| 第三参数 | 取第几列 | 2 | 区域第一列算 1,姓名在区域第 2 列 |
| 第四参数 | 匹配方式 | 0 | 0 表示精确匹配,1 表示近似匹配 |
前三个参数决定找什么、上哪找、取哪个值,第四个参数只有两个选项:0(或 FALSE)要求完全相等,1(或 TRUE)允许找最接近的。日常搬数据百分之九十九用 0,这也是新人最容易写错的地方:第四参数漏写或写成 1,返回的结果驴唇不对马嘴,还以为自己表串了。
两条铁律
第一条铁律:查找值必须在区域的第一列。第二参数圈出来的那片区域,最左边那一列必须是装着 A2 那种值的一列。如果姓名在学号左边,VLOOKUP 就废了,得先把那两列的顺序调一下。
第二条铁律:往下拖公式时,查找区域要锁死。上例里区域写的是 $A$1:$D$100,美元符号把行列都固定住。不锁会怎样?拖到第三行时区域自动滑成 A2:D101,花名册第一行的数据就漏出去了,查到最后一个人永远查不到。按 F4 键可以一键加上美元符号,省得手敲。
精确匹配与近似匹配
精确匹配好理解:找王建国的成绩,表里没有王建国就返回 #N/A。近似匹配则像翻字典找最接近的词:查找值不必精确存在,Excel 给你一个不超过查找值的最大匹配。
近似匹配的典型用法是查档:分数对应等级、金额对应提成比例、工龄对应年假天数。前提是查找区域第一列必须按从小到大排好序,否则结果天差地别。这种用法后面篇章还会细讲,先记住第四参数写 1 的时候必须先排序。
查不到怎么办:#N/A 处理
VLOOKUP 找不到就会显示 #N/A,难看且会污染下游计算。成熟的写法是外包一层 IFERROR:
=IFERROR(VLOOKUP(A2,Sheet2!$A$1:$D$100,2,0),“查无此人”)
这样找不到的记录显示查无此人四个字,找到的正常显示姓名。交报表之前务必把 #N/A 都消化掉,哪怕显示成空白(两个中文引号里什么都不写即可)也比错误码专业。
真实案例:做工资条
每月做工资条最折磨:基本工资、绩效、社保三项分别在三张表里,共同字段是工号。你的操作:在总表第一列放工号,然后 B 列写 =VLOOKUP($A2,工资表!$A:$F,3,0) 取绩效、C 列改第三参数取社保。三个 VLOOKUP 各拖一下,全公司工资条半小时合成。
注意 $A2 这种写法:列锁行不锁,公式往右拖时工号引用不变,往下拖时行号随行变化。混合引用是 VLOOKUP 应用的基本功。
| 报错 | 原因 | 排查方向 |
|---|---|---|
| #N/A | 查找值不存在 | 两张表的工号是否一致,是否有空格或不可见字符 |
| #REF! | 列序号超界 | 第三参数大于区域列数 |
| #VALUE! | 参数类型错 | 第四参数写成了文字 |
| 结果错位 | 第四参数写成 1 | 改回 0,或区域第一列不是查找列 |
最隐蔽的坑是数据看着一样其实不一样:工号前多了个空格、一张表是文本格式一张是数字格式、全角半角符号混用。用 LEN 函数对比两格字符长度,或 =A2=B2 直接判断,差异立刻现形。
INDEX 加 MATCH:更自由的组合
VLOOKUP 只能从左往右找,想从右往左就得 INDEX 配 MATCH。写法是 =INDEX(要取的那一列,MATCH(找谁,在哪一列,0))。MATCH 负责在第几行,INDEX 负责把那行的值取出来。看起来复杂,胜在不受列顺序限制。
较新的 Excel 还有 XLOOKUP,一个函数搞定左右查找、默认精确匹配、找不到还能自定义提示,=XLOOKUP(A2,Sheet2!$A$1:$A$100,Sheet2!$C$1:$C$100,“无”)。新版本用户优先学它,老旧文件兼容场景再回退 VLOOKUP。
VLOOKUP 的四条军规
- 第四参数永远想清楚再写:精确匹配写 0,只有查档分级才用 1,且查找列必须先升序排好。
- 查找区域用绝对引用锁死:按 F4 加美元符号,否则拖一下公式漏一片数据。
- 查找值与被查值格式一致:文本数字混用时用分列或乘 1 的方式统一,否则永远查不到。
- 匹配的字段先清洗:批量去除前后空格用查找替换或 TRIM 函数,眼睛看不见的空格是 #N/A 的头号元凶。
做匹配前的准备工作
拿到两张要匹配的表,别急着写公式,先做三件事:一是两张表都按共同字段排个序,肉眼扫一遍有没有明显对不上的;二是把两列工号或学号的格式统一(选中列,点数据选项卡的分列直接完成可把文本转数字);三是确认查找值没有重复,重复的话 VLOOKUP 只返回第一个匹配到的结果。匹配字段的唯一性是数据质量的地基,磨刀不误砍柴工。
一次匹配多列的小技巧
要取不只一列数据时,第三参数可以做成自动的:=VLOOKUP($A2,Sheet2!$A:$F,COLUMN(B1),0)。COLUMN(B1) 返回 2,公式往右拖到下一列自动变成 3、4,一个公式横着拖竖着拉,就能覆盖整片结果区。这个小改动把重复劳动再砍掉一半,做过工资条的人都知道有多省事。
写熟练之后,工资条、成本归集、库存核对这类活,思路都一样:找共同字段、锁区域、拖公式、兜错误。VLOOKUP 会被你用成办公桌上的螺丝刀。
