我正在尝试在VBA中为Excel构建一个简单的宏,它将对具有相同名称(第一列中的值)的所有行进行求和合并。举个例子
ExampleRowA 1 0 1 1 3 4
ExampleRowA 2 1 2 2 1 0
ExampleRowC 9 7 7 7 2 5结果应该如下所示
ExampleRowA 3 1 3 3 4 4
ExampleRowC 9 7 7 7 2 5我们可以假设需要合并的行不是分散的,只能一个接一个地出现。
我做了这样的事情,它几乎可以工作,除了我必须运行它两次。
LastRow = ActiveSheet.UsedRange.Rows.Count
Set r = ActiveSheet.UsedRange.Resize(1)
With Application.WorksheetFunction
For iRow = 2 To LastRow
If Cells(iRow, 1) = Cells(iRow + 1, 1) Then
LastCol = r(r.Count).Column
SumCol = LastCol + 1
For iCol = 2 To SumCol
Cells(iRow, iCol) = .Sum(Range(Cells(iRow, iCol), Cells(iRow + 1, iCol)))
Next iCol
Rows(iRow + 1).Delete
End If
Next iRow
End With我用其他脚本语言做过一些编程,但我是VB/VBA的新手,不知道它的可能性/局限性。
在其他语言中,我可能会使用数组,但我不明白它们在这里的工作方式。我不能否认,由于时间的限制,我更喜欢通过分析例子来学习,而不是阅读500+页面的VBA圣经。
发布于 2011-06-20 18:23:18
试着这样做:
LastRow = ActiveSheet.UsedRange.Rows.Count
Set r = ActiveSheet.UsedRange.Resize(1)
With Application.WorksheetFunction
For iRow = LastRow-1 to 2 step -1
do while Cells(iRow, 1) = Cells(iRow + 1, 1)
LastCol = r(r.Count).Column
SumCol = LastCol + 1
For iCol = 2 To SumCol
Cells(iRow, iCol) = .Sum(Range(Cells(iRow, iCol), Cells(iRow + 1, iCol)))
Next iCol
Rows(iRow + 1).Delete
loop
Next iRow
End With发布于 2011-06-20 19:36:03
下面的代码更容易阅读,并且可以完成以下工作:
Sub Macro1()
Dim ColumnsCount As Integer
ColumnsCount = ActiveSheet.UsedRange.Columns.Count
ActiveSheet.UsedRange.Activate
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发布于 2015-07-10 04:27:57
‘如果你必须运行宏两次,idk放一个1: on top of your macro and on the bottom put goto 1’,它将为你运行两次,或者你可以在一个不同的宏中调用它两次。
https://stackoverflow.com/questions/6409738
复制相似问题