【问题标题】:Excel: How to gather unique values in one column that are associated with duplicates in another column?Excel:如何在一列中收集与另一列中的重复项相关联的唯一值?
【发布时间】:2023-01-09 19:43:42
【问题描述】:

使用这样的数据:

Column A     Column B
1               98
1               12
1               21 
1               31   
2               37
2               40
3               48 
4               34
4               88
4               74 
4               99
7               82
7               19
7               29
7               50 
7               95
7               85

Column B 中的所有值都是唯一的,Column A 有多个重复值。如何将 A 值分组在一列中,并在另一列中显示 B 的串联值,如下所示:

Column C   Column D
1             98,12,21,31
2             37,40
3             48
4             34,88,74,99
7             82,19,29,50,95,85

我试过结合使用连接、索引和匹配,但一切都变得一团糟。

有什么建议会很好吗?

【问题讨论】:

    标签: excel excel-formula powerquery


    【解决方案1】:

    让我在@Harun24HR 的回答中添加另外两种方法。这两个选项都假设您没有根据样本数据的标题。


    选项1): 动态数组函数

    当一个人可以访问动态数组函数时,您可以使用以下内容:

    C1

    =UNIQUE(A1:A17)
    

    这个 UNIQUE 函数将 spill 定义范围内的唯一值数组放入 C 列。

    D1

    =TEXTJOIN(",",TRUE,FILTER(B$1:B$17,A$1:A$17=C1))
    

    FILTER 将从 B 列中提取与 A 列匹配的所有值,而 TEXTJOIN 会将这些值连接到您想要的字符串中。

    拖累...


    选项 2): PowerQuery

    你想尝试一下吗Power Query/获取和转换那么你不需要任何公式,也不需要VBA。按着这些次序:

    • 选择A1:B17,然后从功能区中的“获取和转换数据”下选择Data > From Table/Range
    • 选择导入不带标题的数据。将打开一个新窗口。
    • 从功能区单击Transform > Group By。在该菜单中选择按 Column1 分组,选择一个新的列名称,例如:“Grouped”,然后从 Operation 下拉列表中选择 All Rows,然后单击 OK
    • 您会注意到一个额外的列。现在在功能区上单击Add Column > Custom Column 并输入以下公式:Table.Column([Grouped], "Column2")。这应该添加包含值列表的第三列。
    • 从表中删除Grouped。然后单击新添加的列名称右侧的图标,您将有两个选项。选择 Extract Values,然后选择逗号作为分隔符。

    下面的 M 代码中可能存在翻译错误,但应该是这样的:

    let
        Source = Excel.CurrentWorkbook(){[Name="Tabel1"]}[Content],
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", Int64.Type}, {"Column2", Int64.Type}}),
        #"Grouped Rows" = Table.Group(#"Changed Type", {"Column1"}, {{"Grouped", each _, type table [Column1=number, Column2=number]}}),
        #"Added Custom" = Table.AddColumn(#"Grouped Rows", "Custom", each Table.Column([Grouped], "Column2")),
        #"Extracted Values" = Table.TransformColumns(#"Added Custom", {"Custom", each Text.Combine(List.Transform(_, Text.From), ","), type text}),
        #"Removed Columns" = Table.RemoveColumns(#"Extracted Values",{"Grouped"})
    in
        #"Removed Columns"
    

    如果我没记错的话,PowerQuery 可从 Excel-2010 获得,因此您不需要访问 TEXTJOIN 等高级公式即可执行此操作。

    【讨论】:

    • 谢谢!我选择了 power query 选项,它非常有效。
    【解决方案2】:

    首先,您需要从Column A 提取唯一值到Column C。您可以使用Advance Filter 方法来完成,也可以使用以下公式。

    =IFERROR(INDEX($A$2:$A$18,MATCH(0,INDEX(COUNTIF($C$1:C1,$A$2:$A$18),0,0),0)),"")
    

    提取唯一值后,您必须使用 TEXTJOIN() 公式来聚合从 Column BColumn D 的值。你的 excel 版本中有 TEXTJOIN() 公式,然后你可以像下面这样使用它

    =TEXTJOIN(", ",TRUE,IF($A$2:$A$18=C2,$B$2:$B$18,""))
    

    否则你必须使用VBA自定义函数来编写TextJoin()公式。对于 TEXTJOIN() 自定义函数,您可以查看这篇文章。 Post Link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-17
      • 1970-01-01
      相关资源
      最近更新 更多