如何使用VBA对Excel中的类似行求和/合并?
我正在尝试在VBA for Excel中构建一个简单的宏,该宏将对第一列中具有相同名称值的所有行进行求和[合并]。 比如说如何使用VBA对Excel中的类似行求和/合并?,vba,excel,merge,rows,Vba,Excel,Merge,Rows,我正在尝试在VBA for 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 我们可以假设需要合并的行不是分散的,只能一个接一个地出现 我做了类似的事情,它几乎可以工作,除了我必须运行它两次
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圣经。试试这样的东西:
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
此代码更易于阅读,并执行以下操作:
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
'如果必须运行宏两次,idk将 1: 在宏的顶部和底部放置 转到1 “那会让你跑两次
'或者您可以在不同的宏中调用它两次。取决于您对于您的问题,您不需要宏或任何VBA代码 首先,可以打开包含重复值的表的图纸。 遵循以下步骤: 将Excel光标放在需要合并数据的位置。然后,转到数据选项卡>合并。 “合并”对话框将出现。 在此处输入具有重复值的表,然后单击“添加”添加这些值。 然后,选择具有重复值的行/列。在这张图中,它位于左列。 只需单击“确定”,即可完成。
谢谢这完美地解决了迭代问题。但如果有更固体的溶液,我仍然愿意。溶液需要是宏观的吗?您是否考虑过改用Excel的内置电子表格功能?例如,如果第一列的可能值提前已知,则可以使用SUMIF工作表函数轻松完成此操作。如果第一列的可能值事先未知,则可以使用透视表。这不会生成无限循环吗?如果要合并的行彼此不相邻,有什么方法可以这样做吗?