组合一列中存在重复值的行

时间:2016-10-08 20:51:23

标签: excel vba excel-vba

我需要帮助动态地将行与VBA结合在Excel中,其中值有时在一列中相同。

样本数据

A B C   D   E
1 r 10  5   3
1 r 12  8   2
2 q 60  50  40
2 q 25  45  55
2 q 100 200 300

编辑:我的示例数据中出错,将A中的最后一个值从3更改为2。

理想情况下,我会合并下面B列中值相同的行,同时合并C& C中的值。 D用半冒号分隔,并对E列中的值求和。

当有一个重复但没有变化的重复数量(动态组合)

时,它会起作用

这基本上是我尝试过的:

Dim i As Long
i = 2

For i = 2 to lastRow
    If Cells(i, 2).Value = Cells(i + 1, 2).Value Then
        Cells(i, 3).Value = Cells(i, 3).Value & ";" & Cells(i + 1, 3).Value
        Cells(i, 4).Value = Cells(i, 4).Value + Cells(i + 1, 4).Value
        Rows(i + 1).Delete
    Else
        i = i + 1
    End If
Loop    

2 个答案:

答案 0 :(得分:5)

我们可以倒退。之前:

enter image description here

子:

Sub dural()
    Dim i As Long
    lastRow = 5

    For i = lastRow To 2 Step -1
        If Cells(i, 2).Value = Cells(i - 1, 2).Value Then
            Cells(i - 1, 3).Value = Cells(i - 1, 3).Value & ";" & Cells(i, 3).Value
            Cells(i - 1, 4).Value = Cells(i - 1, 4).Value + Cells(i, 4).Value
            Rows(i).Delete
        End If
    Next i
End Sub

之后:

enter image description here

答案 1 :(得分:0)

我认为这会做你想要的。

Sub Macro()
Dim lngRow As Long
For lngRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row To 2 Step -1
If StrComp(Range("B" & lngRow), Range("B" & lngRow - 1), vbTextCompare) = 0 Then
If Range("C" & lngRow) <> "" Then
Range("C" & lngRow - 1) = Range("C" & lngRow - 1) & "|" & Range("C" & lngRow) & _
    Range("D" & lngRow - 1) & ";" & Range("D" & lngRow)
End If
Rows(lngRow).Delete
End If
Next

    Columns("D:E").Select
    Selection.ClearContents

End Sub