如何将Excel中重复行表头转换为列表头并规整数据
如何将Excel中重复行表头转换为列表头并规整数据
嗨,这个需求我之前帮同事处理过,其实用Excel自带的Power Query就能轻松搞定,不用写复杂公式或者代码,一步步来就行:
步骤1:把原始数据导入Power Query
- 选中你所有的原始数据(包括重复的
Name/Age/Color和对应的数值) - 点击顶部菜单栏的「数据」选项卡 → 选择「从表格/区域」
- 弹出的对话框里,不要勾选「我的表格有标题」(因为咱们的原始数据没有统一表头),直接点「确定」,进入Power Query编辑器
步骤2:给数据分组,先把「字段名+对应值」配对
进入编辑器后,所有数据会在一列(默认叫Column1)里:
- 点击「添加列」选项卡 → 「索引列」→ 选择「从0开始」,给每行加上从0开始的序号
- 再添加自定义列,公式写:
=Number.IntegerDivide([Index],2),给列起名「字段值组ID」—— 这样每两行(字段名+对应值)会分到同一个组里 - 点击「转换」选项卡 → 「分组依据」,在对话框里:
- 「分组依据」选刚才的「字段值组ID」
- 「新列名」叫「字段值对」
- 「操作」选「将行聚合到列表」,点「确定」
这时每行都是一个列表,比如第一个就是{"Name", "John"},第二个是{"Age", "19"}
步骤3:把每个用户的3组字段值对合并成一行
现在要把每3个「字段值对」合并成一个用户的完整信息:
- 再添加自定义列,公式写:
=Number.IntegerDivide([字段值组ID],3),起名「用户ID」—— 这样每3个字段值组会对应同一个用户ID - 再次点击「转换」→「分组依据」:
- 「分组依据」选「用户ID」
- 「新列名」叫「用户信息」
- 「操作」选「将行聚合到列表」,点「确定」
这时每行的「用户信息」列里,是包含3个字段值对的列表,比如第一个就是{{"Name", "John"}, {"Age", "19"}, {"Color", "Green"}}
- 点击「添加列」→「自定义列」,公式写:
=Record.FromList(List.Transform([用户信息], each _{1}), List.Transform([用户信息], each _{0})),起名「用户记录」—— 这个公式会把列表转成结构化记录,比如[Name="John", Age="19", Color="Green"] - 点击「用户记录」列旁的展开箭头(双向箭头),勾选所有字段(Name、Age、Color),点「确定」,就能把记录拆成三列
步骤4:设置表头并加载回Excel
- 现在你会看到规整的三列数据,列名已经是
Name/Age/Color了 - 点击「主页」选项卡 → 「关闭并上载」,处理好的数据就会加载到Excel新工作表里
备选方法:公式手动处理(适合数据量小的情况)
如果数据量不大,也可以用公式快速填充:
- 在新区域第一行输入表头:
Name、Age、Color Name列第二行输入公式:=OFFSET($A$1,ROW(A1)*6-5,0),下拉填充(6是每个用户占的行数:Name+John+Age+19+Color+Green,共6行,可根据实际调整)Age列第二行输入:=OFFSET($A$1,ROW(A1)*6-3,0),下拉填充Color列第二行输入:=OFFSET($A$1,ROW(A1)*6-1,0),下拉填充
备注:内容来源于stack exchange,提问作者Oren
相关产品推荐
相关产品推荐

