Excel:如何收集一列中与另一列中的重复项相关联的唯一值?

Sti*_*ian 4 excel excel-formula

有了这样的数据:

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
Run Code Online (Sandbox Code Playgroud)

其中所有值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
Run Code Online (Sandbox Code Playgroud)

我尝试过将连接、索引和匹配结合起来,但一切都变得一团糟。

有什么建议会很棒吗?

Har*_*4HR 7

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

=IFERROR(INDEX($A$2:$A$18,MATCH(0,INDEX(COUNTIF($C$1:C1,$A$2:$A$18),0,0),0)),"")
Run Code Online (Sandbox Code Playgroud)

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

=TEXTJOIN(", ",TRUE,IF($A$2:$A$18=C2,$B$2:$B$18,""))
Run Code Online (Sandbox Code Playgroud)

否则,您必须使用VBA自定义函数来编写TextJoin()公式。对于TEXTJOIN()自定义功能,您可以查看这篇文章。发布链接

在此处输入图片说明


Jvd*_*vdV 5

让我在@Harun24HR 的答案中添加两个额外的方法。这两个选项都假定您没有根据示例数据的标题。


选项 1):动态数组函数

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

C1

=UNIQUE(A1:A17)
Run Code Online (Sandbox Code Playgroud)

UNIQUE函数会将定义范围内的唯一值数组溢出到 C 列中。

D1

=TEXTJOIN(",",TRUE,FILTER(B$1:B$17,A$1:A$17=C1))
Run Code Online (Sandbox Code Playgroud)

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

拖累...


选项 2)PowerQuery

您想尝试使用PowerQuery/GetAndTransform那么您不需要任何公式,也不需要任何公式VBA。按着这些次序:

  • 选择A1:B17并从功能区中选择Data>From Table/Range在“获取和转换数据”下
  • 选择导入没有标题的数据。将打开一个新窗口。
  • 从功能区单击Transform> Group By。在该菜单中选择按 Column1 分组,选择一个新的列名称,例如:“分组”,然后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"
Run Code Online (Sandbox Code Playgroud)

如果我没记错的话,可以从 Excel-2010 中使用 PowerQuery,因此您不需要访问高级公式TEXTJOIN来执行此操作。

  • 谢谢你!我选择了 power querty 选项,它的效果非常好。 (2认同)