【问题标题】:How can i concatenate row text with comma in excel?如何在excel中用逗号连接行文本?
【发布时间】:2014-02-10 15:32:07
【问题描述】:
我有一个如下的excel数据,我想按照这样的人名连接用逗号分隔的技能;
Irakli Beridze | C#, Python, Java
Parpali Zurashvili | C++, C
我可以按照后面的场景来实现,但是我有n条数据行。
【问题讨论】:
标签:
excel
excel-formula
concatenation
【解决方案1】:
您可以使用这样的辅助列来做到这一点:
-
插入过滤器并按名称排序:
-
在单元格C2中,输入公式:
=IF(A2=A3,0,1)
0 将是“副本”所在的位置,1 将是要保留的最后一行的位置。
-
在 D2 单元格中,输入 B2 的值,在 D3 中,输入以下公式:
=IF(A3=A2,D2&", "&B3,B3)
-
现在已经完成,复制并粘贴 D 列中的值(复制整个列,使用特殊粘贴并选择“值”)。删除过滤器,重新添加过滤器,但这次是在所有 4 列上并在 C 列中过滤 0:
-
删除这些行并清除过滤器。最后,对 A 列进行排序:
您现在可以删除列 B 和 C。
【解决方案2】:
如果您不介意 VBA,可以使用以下内容:
Sub ConcatRows()
Dim arr As Variant
Dim i As Long
Dim d As Dictionary
'Create a dictionary to hold all Name and Skill Values
Set d = CreateObject("Scripting.Dictionary")
'Fill an array with all Values
arr = Range("A2", Cells(Rows.Count, 2).End(xlUp))
'Loop the Values and and them into a dictionary
For i = LBound(arr) To UBound(arr)
'If Name already in list then Add Skill to Item value of Name Key
If d.Exists(arr(i, 1)) Then
d(arr(i, 1)) = d(arr(i, 1)) & ", " & arr(i, 2)
'If Name isn't already in list then add name with its first Skill
Else
d.Add arr(i, 1), arr(i, 2)
End If
Next i
'Write all Name back to Worksheet
Range("A2").Resize(d.Count) = Application.Transpose(d.Keys)
'Write all Skills Back to worksheet
Range("B2").Resize(d.Count) = Application.Transpose(d.Items)
End Sub