如何将垂直表格转换为水平表格?Pivot Table等工具尝试未果
将垂直表格转换为按城市分组的水平表格
需求场景
原始垂直表格:
| City | Name | Address |
|---|---|---|
| City A | Company A | Address A |
| City B | Company B | Address B |
| City A | Company C | Address C |
| City B | Company D | Address D |
需转换为以下水平结构(同城市的多条记录拆分为独立列):
| Name_1 | Address_1 | Name_2 | Address_2 | |
|---|---|---|---|---|
| City A | Company A | Address A | Company C | Address C |
| City B | Company B | Address B | Company D | Address D |
此前使用数据透视表、Power Query或measure功能时,得到的是同城市内容合并在同一单元格的结果,不符合需求,且暂不想使用VBA。
方法一:Power Query 分步实现
- 加载数据到Power Query:选中原始数据区域,点击「数据」选项卡 → 「从表格/区域」,确认数据包含表头后进入编辑器。
- 按城市分组:选中「City」列,点击「转换」选项卡 → 「分组依据」,设置:
- 分组依据:
City - 新列名:
GroupedData - 操作:
所有行
- 分组依据:
- 展开分组并添加组内索引:点击
GroupedData列的展开按钮,选择「展开到新行」;再次选中「City」列,执行「分组依据」,设置:- 分组依据:
City - 新列名:
IndexedRows - 操作:
添加自定义列,公式为:Table.AddIndexColumn([GroupedData], "Index", 1, 1)
- 分组依据:
- 展开索引后的数据:点击
IndexedRows列的展开按钮,选择展开所有列(包含Name、Address、Index)。 - 透视列生成目标结构:
- 选中「Index」列,点击「转换」→ 「透视列」,值列选择
Name,聚合函数选「不要聚合」; - 重复上述透视操作,值列选择
Address,索引列仍为「Index」;
- 选中「Index」列,点击「转换」→ 「透视列」,值列选择
- 调整列名并上载:将自动生成的
Name.1、Address.1重命名为Name_1、Address_1,以此类推;最后点击「关闭并上载」,即可得到目标表格。
方法二:Excel公式法(无需工具)
假设原始数据位于A2:C5(A列=City,B列=Name,C列=Address):
- 提取唯一城市:在
E2单元格输入公式=UNIQUE(A2:A5),下拉得到所有唯一城市。 - 生成表头:根据最大记录数(示例中为2),在
G1输入Name_1、H1输入Address_1、I1输入Name_2、J1输入Address_2。 - 填充Name列数据:在
G2输入数组公式(Excel 365可直接回车,旧版本按Ctrl+Shift+Enter):
向右、向下填充公式,即可得到对应城市的第N个Name值。=INDEX($B:$B,SMALL(IF($A:$A=$E2,ROW($A:$A)),COLUMN(A:A))) - 填充Address列数据:在
H2输入数组公式:
同样向右、向下填充,得到对应Address值。=INDEX($C:$C,SMALL(IF($A:$A=$E2,ROW($A:$A)),COLUMN(A:A))) - 整理格式:隐藏辅助列(如需要),调整表格样式即可。
内容的提问来源于stack exchange,提问作者Kerovin
相关产品推荐
相关产品推荐

