合并一列中存在重复值的行
我需要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