将Excel行变成列

时间:2019-05-21 19:00:47

标签: excel

我需要重新格式化我的数据。

现在,看起来像这样

PersonCol   DataCol
Person1     Data1
Person1     Data2
Person1     Data3
Person2     Data4
Person2     Data5
Person2     Data6
Person3     Data7

我需要对其进行旋转,使其看起来像这样。我需要将第一行转换为列名,并将与此相关的所有数据显示在下面的列表中。

Person1       Person2       Person3
Data 1        Data4         Data7
Data2         Data5
Data3         Data6

我尝试使用TRANSPOSE函数,但这种方法无法达到我需要的方式。

我会手动执行此操作。但是,该列表需要自动更新

2 个答案:

答案 0 :(得分:0)

您提出的数据结构从数据库/ 的角度来看是没有意义的,因为如果每个人出现的数据不止一次,它就无法正确显示数据。

最简单,最合理的结构是创建一个数据透视表,如下所示:

enter image description here

即使多次发生,也可以正确计算每人的数据计数。

其他选择是替换重复项并使用=COUNTIF()


编辑:我想您是否真的想使用这样的东西,但我不建议这样做。数据透视表效果很好

enter image description here

Data1的公式如下:

=IFNA(INDEX(D4:E$10, MATCH(1, E4:$E$10, 0),1), "")

答案 1 :(得分:0)

您可以使用Power Query(在Excel 2016+中也称为Get & Transform)执行此操作。而且,如果您的源数据发生更改,则可以更新查询。

  • 在表格中选择一个单元格
  • (在Excel 2016中):“数据”功能区,“获取和转换”选项卡,来自表/范围
  • 在PQ用户界面中:按PersonCol分组:= {All Rows
  • 添加列;自定义列;公式:=Table.Column([Grouped],"DataCol")
  • 选择Custom列标题右侧的双向箭头
    • 提取值
    • 我使用分号作为分隔符,使用了数据中未出现的内容
  • 按定界符分隔列(分号)->新列中的数据
  • 删除您之前对数据进行分组的表列
  • 转置表格
  • 将第一行提升为标题
  • 关闭并加载到您想要的任何地方

M代码

let
    Source = Excel.CurrentWorkbook(){[Name="Table4"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"PersonCol", type text}, {"DataCol", type text}}),
    #"Grouped Rows" = Table.Group(#"Changed Type", {"PersonCol"}, {{"Grouped", each _, type table [PersonCol=text, DataCol=text]}}),
    #"Added Custom" = Table.AddColumn(#"Grouped Rows", "Custom", each Table.Column([Grouped],"DataCol")),
    #"Extracted Values" = Table.TransformColumns(#"Added Custom", {"Custom", each Text.Combine(List.Transform(_, Text.From), ";"), type text}),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Extracted Values", "Custom", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), {"Custom.1", "Custom.2", "Custom.3"}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Custom.1", type text}, {"Custom.2", type text}, {"Custom.3", type text}}),
    #"Removed Columns" = Table.RemoveColumns(#"Changed Type1",{"Grouped"}),
    #"Transposed Table" = Table.Transpose(#"Removed Columns"),
    #"Promoted Headers" = Table.PromoteHeaders(#"Transposed Table", [PromoteAllScalars=true]),
    #"Changed Type2" = Table.TransformColumnTypes(#"Promoted Headers",{{"Person1", type text}, {"Person2", type text}, {"Person3", type text}})
in
    #"Changed Type2"

结果

enter image description here