我将如何获取以下多行格式的数据:
ID | 类型 1 | 类型 2 | 类型 3 |
---|---|---|---|
1 | 绿色的 | ||
1 | 蓝色的 |
并将它们合并为一行,例如:
ID | 类型 1 | 类型 2 | 类型 3 |
---|---|---|---|
1 | 绿色的 | 蓝色的 |
答案1
我稍微扩展了您的数据,以便更好地了解以下方法的工作原理。使用的输入数据如下所示:
过滤功能:
解决此问题的一种方法是使用 Filter 函数的公式化方法(仅适用于 Excel for Microsoft 365 或 Excel 2021)。对于这种方法,请在 F:I 列中重复标题。在 F2 列中,输入以下公式:=UNIQUE(A2:A9)
;这将为您提供唯一 ID 的数组。下一步是在 G2 列中输入以下公式并将其复制到范围内的其他单元格:
=FILTER(B$1:B$9,($A$1:$A$9=$F2)*(B$1:B$9<>""),"")
该函数本身非常简单。第一部分指定要返回的数组,第二部分指定条件。第一个条件确保返回与所考虑的 ID 相对应的值,第二部分确保仅返回非空值。如果数组为空,则过滤器函数的最后一部分将返回一个空单元格。
输出如下:
替代公式化方法:
如果您无法使用此功能,则解决此问题的另一种公式化方法可能如下。首先,将输入数据复制到范围F1:I9
并相应地删除所有颜色。现在在单元格中输入以下公式G2
并将其复制到范围G2:I9
。
=IFERROR(IF(ISBLANK(B2),INDEX(B:B, MATCH(1,($A:$A=$A2)*(1-ISBLANK(B:B)),0)),B2), "")
下一步是将标题复制到范围K1:N1
。在单元格中K2
,输入以下公式以创建唯一 ID 数组:=UNIQUE(F2:F9)
。要检索相关信息,下一步是在单元格中输入以下公式L2
并将其复制到相应的范围L2:N4
:
=INDEX($F$1:$I$9,MATCH($K2,$F$1:$F$9,0),MATCH(L$1,$F$1:$I$1,0))
数据透视表方法:
最后,可以使用数据透视表方法。这种方法的主要困难在于您拥有的是文本数据而不是数字数据。但是,有一种解决方法可以做到这一点。对于这种方法,我认为最有意义的是稍微调整一下数据并将其转换为 Excel 表,方法是CTRL + T
:
选择您的数据并通过选项卡Insert
-> PivotTable
-> 插入数据透视表,确保已选中该选项。将 ID 拖到“行”字段中,将类型拖到“列”字段中。在-> ->Add this data to the Data Model
中搜索 Table1 。PivotTable fields
right-click
Add Measure...
创建以下度量:
将此新度量拖到“值”字段中。选择数据透视表后,将Design
出现选项卡,您可以在其中关闭小计和总计,或将报告布局设置为表格格式。根据需要设置报告后,您将获得以下最终结果:
答案2
Power Query
您可以使用Windows Excel 2010+ 和 Office 365 Excel 中提供的获取所需的输出
- 选择原始表格中的某个单元格
Data => Get&Transform => From Table/Range
或者From within sheet
- 当 PQ UI 打开时,导航至
Home => Advanced Editor
- 记下代码第 2 行的表名称。
- 用以下代码替换现有代码M 代码以下
- 将粘贴代码第 2 行的表名更改为您的“真实”表名
- 检查任何注释以及窗口
Applied Steps
,以更好地理解算法和步骤
let
//change next line to reflect your actual data source (change table name probably)
Source = Excel.CurrentWorkbook(){[Name="Table3"]}[Content],
//set data types
#"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", Int64.Type}, {"Type 1", type text}, {"Type 2", type text}, {"Type 3", type text}}),
//Group by ID, then combine data for each Type.
// If there is only one entry per type, this will return just a single value
#"Grouped Rows" = Table.Group(#"Changed Type", {"ID"}, {
{"Type 1", each Text.Combine([Type 1],", "), type text},
{"Type 2", each Text.Combine([Type 2],", "), type text},
{"Type 3", each Text.Combine([Type 3],", "), type text}})
in
#"Grouped Rows"