将表格格式从垂直转换为水平

将表格格式从垂直转换为水平

我找到了一篇与我想要实现的目标类似的帖子,但反过来 将水平表格布局转换为垂直表格

我想改变这一点

城市 姓名 地址
城市A 公司A 地址A
城市B 公司B 地址B
城市A 公司C 地址C
城市B 公司D 地址D

对此

名称_1 地址1 名称_2 地址2
城市A 公司A 地址A 公司C 地址C
城市B 公司B 地址B 公司D 地址D

我尝试了数据透视表,但无法在城市行内显示名称。它只是返回数字。我被这个问题困扰了好几个小时,但就是找不到使用数据透视表的方法。TIA。

答案1

我认为您不能使用 Excel 中的数据透视表来执行此操作。

但是,这可以使用 Windows Excel 2010+ 和 Microsoft 365(Windows 或 Mac)中提供的 Power Query 来实现

使用 Power Query

  • 在数据表中选择一些单元格
  • Data => Get&Transform => from Table/Range
  • 当 PQ 编辑器打开时:Home => Advanced Editor
  • 记下表格姓名在第 2 行
  • 将下面的 M 代码粘贴到您所看到的位置
  • 将第 2 行的表名改回最初生成的表名。
  • 阅读评论并探索Applied Steps以了解算法
let

//change next line to reflect actual data source
    Source = Excel.CurrentWorkbook(){[Name="Table46"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"City", type text}, {"Name", type text}, {"Address", type text}}),

//unpivot Name/Address columns 
    #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"City"}, "Attribute", "Value"),

//Group by City
    #"Grouped Rows" = Table.Group(#"Unpivoted Other Columns", {"City"}, {

    //for each subgroup (City)
        {"all", (t)=>let 

        //Add a numeric suffix to the Attributes to create the new column names
            #"Add Index" = Table.AddIndexColumn(t,"idx",0,1,Int64.Type),
            #"Number Suffix" = Table.AddColumn(#"Add Index", "Divide", each "_" & Text.From(Number.IntegerDivide([idx],2)+1)),
            #"Remove idx" = Table.RemoveColumns(#"Number Suffix",{"idx"}),
            #"Col Hdrs" = Table.CombineColumns(#"Remove idx",{"Attribute","Divide"},Combiner.CombineTextByDelimiter(""),"Attribute"),

        //then pivot on the column header column
            #"Pivot Table" = Table.Pivot(#"Col Hdrs", List.Distinct(#"Col Hdrs"[Attribute]), "Attribute","Value")
        in 
            #"Pivot Table", type table}}),

//create a list of all the column Names
    #"All Column Headers" = List.Distinct(
        List.Accumulate(
            #"Grouped Rows"[all],
            {},
            (state, current)=> state & List.RemoveFirstN(Table.ColumnNames(current),1)
        )),

//Expand the Table (all) column
    #"Expanded all" = Table.ExpandTableColumn(#"Grouped Rows", "all", #"All Column Headers"),
    #"Changed Type1" = Table.TransformColumnTypes(#"Expanded all",List.Transform(#"All Column Headers", each {_, type text}))
in
    #"Changed Type1"

在此处输入图片描述

相关内容