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

我需要dynamic地在Excel中将行与VBA结合起来,其中值在一列中有时是相同的。

样本数据

ABCDE 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&D中的值用分号分隔,并将列E中的值相加。

它有效的时候有一个重复的,但不重复的数量(dynamic组合)

这里基本上是我所尝试过的:

 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 

我们可以倒退。 之前:

在这里输入图像说明

子:

 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 

之后:

在这里输入图像说明

我想这会做你想做的。

 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