我已经阅读了关于合并行和合并数据的所有其他问题。我确实遇到了一个我认为对我有用的解决方案,但是当我运行宏时,它实际上并没有对正确的列进行总结。作为VBA的新手,我无法确定需要在宏中更改哪些内容才能在我的工作表中工作。
背景: 我想使用一个宏,因为我每天都得到一个我必须操作的报告,以便它可以处理到我们的系统中。我已经创建了一个VBA宏来为我做操作,但我已经意识到报告现在有重复的行具有不同的值。下面是一个示例,其中最后一组数字需要加在一起。 (我的实际报告中的第J列)
即。
第1行:C3 = 1234,名称,C5 = ABC,C5Name,C4 = DEF,C4Name,21361
第2行:C3 = 1234,名称,C5 = ABC,C5Name,C4 = DEF,C4Name,132165
这是我找到的解决方案,但我需要知道要改变哪些内容以与我实际需要总结的列相对应。
Sub Merge()
Dim ColumnsCount As Integer
Dim i As Integer
Range("A1").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
Do While ActiveCell.Row <= ActiveSheet.UsedRange.Rows.Count
If ActiveCell.Value = ActiveCell.Offset(1, 0).Value Then
For i = 1 To ColumnsCount - 1
ActiveCell.Offset(0, i).Value = ActiveCell.Offset(0, i).Value + ActiveCell.Offset(1, i).Value
Next
ActiveCell.Offset(1, 0).EntireRow.Delete shift:=xlShiftUp
Else
ActiveCell.Offset(1, 0).Select
End If
Loop
End Sub
&#13;
非常感谢任何和所有帮助。如果我需要提供更多信息,请告诉我。
〜安德烈
答案 0 :(得分:0)
您不必遍历所有列只是为了添加列J的值:
If ActiveCell.Value = ActiveCell.Offset(1, 0).Value Then
ActiveCell.Offset(0, 10).Value = ActiveCell.Offset(0, 10).Value + ActiveCell.Offset(1, 10).Value
ActiveCell.Offset(1, 0).EntireRow.Delete shift:=xlShiftUp
Else
ActiveCell.Offset(1, 0).Select
End If
顺便说一下,如果行没有重复,你确定要增加活动单元格的行吗?可能因为DeleteRow操作而有效,但我只是想问
修改:已删除孤立Next
语句,抱歉。
答案 1 :(得分:0)
看到你的桌子会更好。你还没有解释得足够多。这个答案与user1016274
的答案没那么不同。列B
,D
和H
的第一个订单上方的代码会在添加J
列值时通过比较相同的列来检查和删除重复项。
Sub Merge()
Range("A1").Sort Key1:=Range("B1"), Order1:=xlAscending, Key2:=Range("D1"), Order2:=xlAscending, _
Key3:=Range("H1"), Order3:=xlAscending, Header:=xlYes
'I assume there are column headers. If not, use "Header:=xlNo" instead of "Header:=xlYes"
Range("A2").Select 'I assume there are column headers. If not, use "Range("A1").Select" instead of "Range("A2").Select"
Do While ActiveCell.Row <= ActiveSheet.UsedRange.Rows.Count
If ActiveCell.Offset(0, 1).Value = ActiveCell.Offset(1, 1).Value And ActiveCell.Offset(0, 3).Value = ActiveCell.Offset(1, 3).Value And ActiveCell.Offset(0, 7).Value = ActiveCell.Offset(1, 7).Value Then
ActiveCell.Offset(0, 9).Value = ActiveCell.Offset(0, 9).Value + ActiveCell.Offset(1, 9).Value
ActiveCell.Offset(1, 0).EntireRow.Delete shift:=xlShiftUp
Else
ActiveCell.Offset(1, 0).Select
End If
Loop
End Sub