1
场景背景
HR 有两张表:员工表(工号、姓名、部门、月薪)和考勤表(工号、姓名、出勤天数)。考勤表的姓名列是空的,需要按工号从员工表里匹配。这种「一张表只有 ID,另一张表有详情」的情况,是 VLOOKUP 最经典的用法。
2
数据结构
共 2 个 Sheet3
解决步骤
1
第 1 步:确定查找值在哪一列
VLOOKUP 只能「从左往右」查,所以查找值必须位于查找区域的第一列。这里工号在员工表 A 列,没问题。
2
第 2 步:写第一个 VLOOKUP
考勤表 B2 输入公式:拿 A2 的工号,去员工表 A:D 里找,返回第 2 列姓名。
=VLOOKUP(A2,员工表!A:D,2,FALSE)
3
第 3 步:锁定区域再往下拖
把查找区域改成 $A$2:$D$100(按 F4 加 $),否则拖公式时区域会跟着下移,导致后面的行找不到。
=VLOOKUP(A2,员工表!$A$2:$D$100,2,FALSE)
4
第 4 步:套 IFERROR 处理找不到的人
新员工还没录入员工表时会显示 #N/A,用 IFERROR 换成「待补录」。
=IFERROR(VLOOKUP(A2,员工表!$A$2:$D$100,2,FALSE),"待补录")
4
完整公式与逐段拆解
=IFERROR(VLOOKUP(A2,员工表!$A$2:$D$100,2,FALSE),"待补录")
A2查找值:本表的工号员工表!$A$2:$D$100查找区域:从工号列开始,锁死区域2返回区域内的第 2 列,即姓名FALSE精确匹配,绝对不能省IFERROR(...,"待补录")找不到时显示提示,而不是错误值| A | B | C | D | E | F | G | |
|---|---|---|---|---|---|---|---|
| 1 | 工号 | 姓名 | 部门 | 基本工资 | 绩效 | 加班费 | 应发合计 |
| 2 | E01 | 张三 | 销售部 | 8,000 | 1,200 | 300 | 9,500 |
| 3 | E02 | 李四 | 技术部 | 9,500 | 1,500 | 500 | 11,500 |
| 4 | E03 | 王五 | 销售部 | 7,600 | 900 | 200 | 8,700 |
| 5 | E04 | 赵六 | 市场部 | 6,800 | 800 | 0 | 7,600 |
| 6 | E05 | 孙七 | 销售部 | 8,200 | 1,100 | 400 | 9,700 |
| 7 | E06 | 周八 | 技术部 | 9,000 | 1,600 | 600 | 11,200 |
| 8 | E07 | 吴九 | 市场部 | 7,200 | 700 | 150 | 8,050 |
| 9 | E08 | 郑十 | 技术部 | 8,800 | 1,300 | 350 | 10,450 |
| 10 | 合计 | 65,100 | 9,100 | 2,500 | 76,700 |
当前表:工资明细 · 公式单元格 B2 · 绿色底为公式,蓝色底为动态数组溢出结果
工资明细的姓名列其实就是按工号匹配来的,B2 = 张三
6
数据流向
数据流向演示1 / 4
来源考勤表!A2
➜
去向查找值
考勤表 A2 工号 E03
来源员工表!A2:A6
→
去向定位第 4 行
在员工表 A 列逐行比对
来源员工表!B4
→
去向返回值
取该行第 2 列(姓名)
来源返回值
→
去向考勤表!B2
写入考勤表 B2
跟着高亮一步步看数据怎么流动
7
注意事项与坑
!查找值不在区域第一列 → 一定 #N/A,改用 INDEX+MATCH 或 XLOOKUP。
!漏写第 4 个参数 FALSE,默认近似匹配,会匹配到奇怪的行。
!两边格式不一致:一边是文本 "001"、一边是数字 1,永远匹配不上。
!区域没锁 $,拖公式后结果整体错位,这是新手最常见的坑。
8