如何在Excel Sheet B中使用VLOOKUP公式实现Sheet A的数据格式转换?
用VLOOKUP实现Sheet A到Sheet B的宽格式数据转换
嘿,我来帮你搞定这个Excel数据转换的需求!用下面的公式就能轻松把Sheet A的长格式数据转成Sheet B的宽格式,而且完美支持横纵向批量复制,完全适配你的要求。
Sheet A 原始数据
+-------------+-------+-------+ | Position_ID | Name | Value | +-------------+-------+-------+ | 5963650267 | stack | 10 | | 5963650267 | over | 20 | | 5963650267 | flow | 30 | | 5963650267 | super | 40 | | 5963650267 | user | 50 | | 5963650268 | stack | 90 | | 5963650268 | over | 110 | | 5963650268 | flow | 80 | | 5963650268 | super | 70 | | 5963650268 | user | 20 | +-------------+-------+-------+
Sheet B 预期格式(表头与Position_ID已预先填充)
+-------------+-------+------+------+-------+------+ | Position_ID | stack | over | flow | super | user | +-------------+-------+------+------+-------+------+ | 5963650267 | 10 | 20 | 30 | 40 | 50 | | 5963650268 | 90 | 110 | 80 | 70 | 20 | +-------------+-------+------+------+-------+------+
可批量复制的VLOOKUP公式
假设Sheet B的布局是:
- 第一个Position_ID在
A2单元格 - 第一个Name表头(stack)在
B1单元格
在B2单元格输入以下公式:
=VLOOKUP($A2&"|"&B$1,CHOOSE({1,2},SheetA!$A$2:$A$11&"|"&SheetA!$B$2:$B$11,SheetA!$C$2:$C$11),2,FALSE)
公式关键设计说明:
- 唯一匹配键:
$A2&"|"&B$1把当前行的Position_ID和当前列的Name拼接成唯一标识,用|分隔可以避免内容重叠导致的匹配错误 - 虚拟查找范围:
CHOOSE({1,2},...)构建了一个两列的虚拟数组,第一列是拼接后的匹配键,第二列是对应的Value,给VLOOKUP提供查找依据 - 混合引用设置:
$A2锁定列,纵向复制时始终取当前行的Position_ID;B$1锁定行,横向复制时始终取当前列的Name表头;SheetA的区域用绝对引用$A$2:$A$11,确保复制时范围不偏移
操作步骤:
- 在Sheet B的
B2输入公式后按回车,得到第一个匹配值 - 选中
B2,横向拖动填充柄到F2(对应user列),完成第一行所有Name的匹配 - 选中
B2:F2,纵向拖动填充柄到下一行,完成第二个Position_ID的所有值匹配
可选:XLOOKUP替代方案(适合高版本Excel)
如果你的Excel版本支持XLOOKUP,这个写法更直观:
=XLOOKUP($A2&"|"&B$1,SheetA!$A$2:$A$11&"|"&SheetA!$B$2:$B$11,SheetA!$C$2:$C$11,"",0)
逻辑和VLOOKUP一致,但不需要构建虚拟数组,用起来更省心。
内容的提问来源于stack exchange,提问作者excelguy
相关产品推荐
相关产品推荐

