如何在excel中用逗号连接行文本?

时间:2014-02-10 15:32:07

标签: excel excel-formula concatenation

我有一个excel数据如下所示,我希望根据这个人名连接逗号分隔的技能;

Irakli Beridze     |  C#, Python, Java
Parpali Zurashvili |  C++, C

我可以按照后面的sceanorio实现,但我有n个数据行。

enter image description here

2 个答案:

答案 0 :(得分:5)

你可以使用这样的辅助列来完成它:

  1. 插入过滤器并按名称排序:

    enter image description here

  2. 在单元格C2中,输入公式:

    =IF(A2=A3,0,1)
    

    enter image description here

    0将是“副本”的位置,1将是最后一行保留的位置。

  3. 在单元格D2中,输入B2的值,在D3中,输入以下公式:

    =IF(A3=A2,D2&", "&B3,B3)
    

    enter image description here

  4. 现在已经完成,复制并粘贴D列中的值(复制整列,使用paste special并选择'Values')。删除过滤器,添加过滤器,但这一次在所有4列上,并在C列的0上过滤:

    enter image description here

  5. 删除这些行并清除过滤器。最后,对A列进行排序:

    enter image description here

  6. 您现在可以删除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