使用VBA将具有相似数据的列排序到同一行中

时间:2014-03-18 09:32:58

标签: excel vba excel-vba excel-formula excel-2010

我正在尝试使用最简单的方法合并包含类似数据的行,但我认为它需要一些VBA。如果有人能指出我正确的方向,这将是伟大的。

我想要实现的一个例子是:

NAME | AGE|   AREA    
John | 32 | Portsmouth
Will | 32 | Portsmouth
Matt | 28 | Southampton
Dave | 32 | Portsmouth
Phil | 28 | Southampton
Tony | 25 | Winchester

变成:

AGE|   AREA      | Name 1 | Name 2 | Name 3 |
32 | Portsmouth  | John   | Dave   | Will   | 
28 | Southampton | Matt   | Phil   |        |
25 | Winchester  | Tony   |        |        |
编辑:我已经设法将我需要的东西堆积在一起,但它似乎将非重复数据放入同一列而不是我首选的Name 1 | Name 2 | Name 3任何关于更新此填充单独单元格的想法而不是一样吗?

以下是更新:

Sub mergeCategoryValues()
    Dim lngRow As Long

    With ActiveSheet
        Dim columnToMatch As Integer: columnToMatch = 2
        Dim columnToConcatenate As Integer: columnToConcatenate = 1

        lngRow = .Cells(65536, columnToMatch).End(xlUp).Row
        .Cells(columnToMatch).CurrentRegion.Sort key1:=.Cells(columnToMatch), Header:=xlYes

        Do
            If .Cells(lngRow, columnToMatch) = .Cells(lngRow - 1, columnToMatch) Then
                .Cells(lngRow - 1, columnToConcatenate) = .Cells(lngRow - 1, columnToConcatenate) & "; " & .Cells(lngRow, columnToConcatenate)
            .Rows(lngRow).Delete
            End If

            lngRow = lngRow - 1
        Loop Until lngRow = 1
    End With
End Sub

1 个答案:

答案 0 :(得分:1)

执行此操作时:

If .Cells(lngRow, columnToMatch) = .Cells(lngRow - 1, columnToMatch) Then

你期望进入这种状况吗? 如果之前设置了lngRow(在你的情况下为7)并且columnToMatch为1,除非单元格(7,1)和(6,1)具有相同的信息,否则它将不会执行任何操作。