我需要重新格式化我的数据。
现在,看起来像这样
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函数,但这种方法无法达到我需要的方式。
我会手动执行此操作。但是,该列表需要自动更新
答案 0 :(得分:0)
您提出的数据结构从数据库/ excel的角度来看是没有意义的,因为如果每个人出现的数据不止一次,它就无法正确显示数据。
最简单,最合理的结构是创建一个数据透视表,如下所示:
即使多次发生,也可以正确计算每人的数据计数。
其他选择是替换重复项并使用=COUNTIF()
编辑:我想您是否真的想使用这样的东西,但我不建议这样做。数据透视表效果很好
Data1
的公式如下:
=IFNA(INDEX(D4:E$10, MATCH(1, E4:$E$10, 0),1), "")
答案 1 :(得分:0)
您可以使用Power Query
(在Excel 2016+中也称为Get & Transform
)执行此操作。而且,如果您的源数据发生更改,则可以更新查询。
PersonCol
分组:= {All Rows
=Table.Column([Grouped],"DataCol")
Custom
列标题右侧的双向箭头
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"