让我在@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 等高级公式即可执行此操作。