Excel - 将多个列组合到一个列中

时间:2012-05-16 05:12:38

标签: excel excel-vba vba

我的Excel工作表看起来像这样

      c1        c2      c3      c4

ROW1   abc      def      1       2

ROW2   abc      def      3       4

ROW3   klm      efg     11       5

ROW4   klm      efg     12      89

我想将数据组合成一个单独的列,用一个逗号分隔,用于重复的c1条目。所以excel表应该是这样的,

       c1        c2      c3      c4

ROW1   abc      def      1,3     2,4

ROW2   klm      efg     11,12    5,89

2 个答案:

答案 0 :(得分:5)

此代码

  • 在当前工作表上的A:D列上运行
  • A列和B列中常见的组记录,分别与C列和D列组合使用
  • 运行不区分大小写
  • 输出到新表

enter image description here

    Sub QuickCombine()
    Dim X()
    Dim Y()
    Dim objDic As Object
    Dim lngRow As Long
    Dim lngCol As Long
    Dim ws As Worksheet

    X = Range([a1], Cells(Rows.Count, "D").End(xlUp))
    Y = X
    Set objDic = CreateObject("scripting.dictionary")

    For lngRow = 1 To UBound(X, 1)
        If Not objDic.exists(LCase$(X(lngRow, 1) & X(lngRow, 2))) Then
            objDic.Add LCase$(X(lngRow, 1) & X(lngRow, 2)), lngRow
        Else
            Y(lngRow, 1) = vbNullString
            Y(objDic.Item(LCase$(X(lngRow, 1) & X(lngRow, 2))), 3) = Y(objDic.Item(LCase$(X(lngRow, 1) & X(lngRow, 2))), 3) & "," & X(lngRow, 3)
            Y(objDic.Item(LCase$(X(lngRow, 1) & X(lngRow, 2))), 4) = Y(objDic.Item(LCase$(X(lngRow, 1) & X(lngRow, 2))), 4) & "," & X(lngRow, 4)
        End If
    Next

    Set ws = Sheets.Add

    ws.[a1].Resize(UBound(X, 1), UBound(X, 2)) = Y
    ws.Columns("A").SpecialCells(xlBlanks).EntireRow.Delete

End Sub

答案 1 :(得分:0)

您可以使用excel concatenate函数执行此操作。这是good tutorial

的链接

此外,要处理重复项,您可以使用Excel突出显示重复条目,以便轻松删除它们。 See here