You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将垂直表格转换为水平表格?Pivot Table等工具尝试未果

将垂直表格转换为按城市分组的水平表格

需求场景

原始垂直表格:

CityNameAddress
City ACompany AAddress A
City BCompany BAddress B
City ACompany CAddress C
City BCompany DAddress D

需转换为以下水平结构(同城市的多条记录拆分为独立列):

Name_1Address_1Name_2Address_2
City ACompany AAddress ACompany CAddress C
City BCompany BAddress BCompany DAddress D

此前使用数据透视表、Power Query或measure功能时,得到的是同城市内容合并在同一单元格的结果,不符合需求,且暂不想使用VBA。


方法一:Power Query 分步实现

  1. 加载数据到Power Query:选中原始数据区域,点击「数据」选项卡 → 「从表格/区域」,确认数据包含表头后进入编辑器。
  2. 按城市分组:选中「City」列,点击「转换」选项卡 → 「分组依据」,设置:
    • 分组依据:City
    • 新列名:GroupedData
    • 操作:所有行
  3. 展开分组并添加组内索引:点击GroupedData列的展开按钮,选择「展开到新行」;再次选中「City」列,执行「分组依据」,设置:
    • 分组依据:City
    • 新列名:IndexedRows
    • 操作:添加自定义列,公式为:Table.AddIndexColumn([GroupedData], "Index", 1, 1)
  4. 展开索引后的数据:点击IndexedRows列的展开按钮,选择展开所有列(包含Name、Address、Index)。
  5. 透视列生成目标结构:
    • 选中「Index」列,点击「转换」→ 「透视列」,值列选择Name,聚合函数选「不要聚合」;
    • 重复上述透视操作,值列选择Address,索引列仍为「Index」;
  6. 调整列名并上载:将自动生成的Name.1、Address.1重命名为Name_1、Address_1,以此类推;最后点击「关闭并上载」,即可得到目标表格。

方法二:Excel公式法(无需工具)

假设原始数据位于A2:C5(A列=City,B列=Name,C列=Address):

  1. 提取唯一城市:在E2单元格输入公式=UNIQUE(A2:A5),下拉得到所有唯一城市。
  2. 生成表头:根据最大记录数(示例中为2),在G1输入Name_1、H1输入Address_1、I1输入Name_2、J1输入Address_2。
  3. 填充Name列数据:在G2输入数组公式(Excel 365可直接回车,旧版本按Ctrl+Shift+Enter):
    =INDEX($B:$B,SMALL(IF($A:$A=$E2,ROW($A:$A)),COLUMN(A:A)))
    
    向右、向下填充公式,即可得到对应城市的第N个Name值。
  4. 填充Address列数据:在H2输入数组公式:
    =INDEX($C:$C,SMALL(IF($A:$A=$E2,ROW($A:$A)),COLUMN(A:A)))
    
    同样向右、向下填充,得到对应Address值。
  5. 整理格式:隐藏辅助列(如需要),调整表格样式即可。

内容的提问来源于stack exchange,提问作者Kerovin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 16:03:19