我有一个excel数据如下所示,我希望根据这个人名连接逗号分隔的技能;
Irakli Beridze | C#, Python, Java
Parpali Zurashvili | C++, C
我可以按照后面的sceanorio实现,但我有n个数据行。
答案 0 :(得分:5)
你可以使用这样的辅助列来完成它:
插入过滤器并按名称排序:
在单元格C2中,输入公式:
=IF(A2=A3,0,1)
0
将是“副本”的位置,1
将是最后一行保留的位置。
在单元格D2中,输入B2的值,在D3中,输入以下公式:
=IF(A3=A2,D2&", "&B3,B3)
现在已经完成,复制并粘贴D列中的值(复制整列,使用paste special并选择'Values')。删除过滤器,添加过滤器,但这一次在所有4列上,并在C列的0
上过滤:
删除这些行并清除过滤器。最后,对A列进行排序:
您现在可以删除B列和C列。
答案 1 :(得分:1)
如果您不介意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