使用VBA比较并串联Excel中的重复值

时间:2019-02-06 19:17:29

标签: duplicates concatenation

我有一个excel格式的报告,其中的案例号字段与其他字段具有一对多关系。例如:如果一个案例由多个团队处理,则每个团队都有单独的条目。

我正在尝试通过比较案例编号来连接行值,以删除重复项。

案例#团队类型名称国家/地区

111 aa xx名称国家/地区

111 bb yy国家(地区)

我希望输出为:

案例# 类型 团队 名称 国家

111 aa,bb xx,yy国家/地区

我下面有VBA代码:

Sub mergeCaseNumberValues()
Dim lngRow As Long
With ActiveSheet
    Dim columnToMatch As Integer: columnToMatch = 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

            For i = 2 To 12
            .Cells(lngRow - 1, i).Value = .Cells(lngRow, i).Value & .Cells(lngRow - 1, i).Value

            Next i
            .Rows(lngRow).Delete
        End If
        lngRow = lngRow - 1
    Loop Until lngRow = 1
End With
End Sub

它给了我:

案例#类型团队名称国家/地区

111 aabb xxyy NameName countrycountry

在数据中,每个条目只有团队和类型不同,其他值相同。如何修改VBA以获得结果?有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

我认为您需要对此进行更改:

        For i = 2 To 12
        .Cells(lngRow - 1, i).Value = .Cells(lngRow, i).Value & .Cells(lngRow - 1, i).Value

对此:

        For i = 2 To 12
        .Cells(lngRow - 1, i).Value = .Cells(lngRow, i).Value & ", " & .Cells(lngRow - 1, i).Value

您需要修复连接器以插入逗号。

对于您的重复问题,我认为类似的方法可能有用。请记住,它是未经测试的“空中代码”,但应该可以正确地引导您:

        For i = 2 To 12
          If .Cells(lngRow, i).Value <> .Cells(lngRow - 1, i).Value Then
            .Cells(lngRow - 1, i).Value = .Cells(lngRow, i).Value & ", " & .Cells(lngRow - 1, i).Value
          Else 
            .Cells(lngRow - 1, i).Value = .Cells(lngRow, i).Value
          End If

基本上,您想使用IF语句比较这些值,如果它们相等,则您不希望同时使用它们。