1
场景背景
员工表里工号在 A 列、姓名在 B 列。现在手上只有姓名,想反查工号——这就是「从右往左查」,VLOOKUP 做不到。三种解法:XLOOKUP(最推荐)、INDEX+MATCH(万能)、LOOKUP(1,0/(...)) 老写法。
2
数据结构
共 2 个 Sheet3
解决步骤
1
第 1 步:XLOOKUP 最直接
查找数组和返回数组可以任意位置,B 列找、A 列返回,一行搞定。
=XLOOKUP(A2,员工表!B:B,员工表!A:A,"查无此人")
2
第 2 步:INDEX + MATCH 万能写法
MATCH 找出姓名在第几行,INDEX 在 A 列取同一行。老版本也能用。
=INDEX(员工表!A:A,MATCH(A2,员工表!B:B,0))
3
第 3 步:LOOKUP 经典老写法
LOOKUP(1,0/(条件),返回列) 是数组技巧,兼容 2003 以上所有版本,公式较长但可靠。
=LOOKUP(1,0/(员工表!B:B=A2),员工表!A:A)
4
第 4 步:套 IFERROR 或直接用 XLOOKUP 的第 4 参数
找不到时给出友好提示,避免表格里出现 #N/A。
=IFERROR(INDEX(员工表!A:A,MATCH(A2,员工表!B:B,0)),"查无此人")
4
完整公式与逐段拆解
=XLOOKUP(A2,员工表!B:B,员工表!A:A,"查无此人")
A2要查的姓名员工表!B:B在哪一列里找(可以在任意位置)员工表!A:A要返回哪一列(在查找列的左边也没问题)"查无此人"找不到时的提示,省掉 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 |
当前表:工资明细 · 公式单元格 A2 · 绿色底为公式,蓝色底为动态数组溢出结果
工资明细的工号列就是按姓名反查员工信息得到的
6
数据流向
数据流向演示1 / 4
来源查询!A2
➜
去向查找值
已知姓名「王五」
来源员工表!B2:B6
→
去向行号 4
在 B 列找到第 4 行
来源员工表!A4
→
去向结果
返回 A 列同一行
来源结果
→
去向查询!B2
写回查询表
跟着高亮一步步看数据怎么流动
7
注意事项与坑
!XLOOKUP 在 2016/2019 不可用,公司电脑版本杂时用 INDEX+MATCH。
!INDEX+MATCH 的 MATCH 区域必须是单列,不能选多列区域。
!LOOKUP(1,0/(...)) 遇到多条匹配只返回最后一个。
8