如何将两行合并为一行,使每行填补另一行的空白?

如何将两行合并为一行,使每行填补另一行的空白?

我将如何获取以下多行格式的数据:

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 fieldsright-clickAdd 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"

在此处输入图片描述

相关内容