以下是我的excel格式。
列KZ
是所有列的Grand Total
A|B|C|D|E|F|G|H|.....|KZ|
2|4|3|5|5|6|2|7|.....|34|
8|2|3|5|6|6|3|7|.....|44|
2|0|3|5|5|6|2|7|.....|30|
9|4|3|6|5|6|2|7|.....|44|
2|4|5|0|5|6|3|2|.....|24|
我的Excel工作表中有1000行。我想编写一个宏来将所有列值汇总到KZ
。请帮忙
以下是我正在尝试的代码:
Sub SumMacro()
Dim columns As Long
columns = Sheets("AllData").UsedRange.Columns.Count
Set testData = Sheets("AllData").Range("b65536").End(xlUp)
' Here I want to apply for/do while loop to sum up all the rows.
ActiveCell.FormulaR1C1 = "=SUM(RC[-309]:RC[-1])"
End Sub
问题:我是VBA的初学者,所以我不知道如何动态选择范围。
答案 0 :(得分:1)
这解决了所述情况 - 一般条款 - ,根据您的范围/特定的预期结果进行调整
Sub SumMacro()
Dim Totalcolumns As Long
Dim CounterSum As Long
Dim CounterColumn As Long
Dim SumResult As Long
Totalcolumns = Sheets("AllData").UsedRange.columns.Count
For CounterColumn = 1 To Totalcolumns
For CounterSum = 1 To Cells(Rows.Count, Totalcolumns).End(xlUp).Row
On Error GoTo err01SumMacro
SumResult = Cells(CounterSum, CounterColumn).Value + SumResult
Next CounterSum
Next CounterColumn
MsgBox SumResult 'or debug print...
If 1 = 2 Then '99 If error
err01SumMacro:
MsgBox "err01SumMacro:Data in cells(R:" & CounterSum & ",C:" & CounterColumn & ") is not a number!", vbCriticalvbCritical
End If
End Sub
编辑:工作代码示例
答案 1 :(得分:0)
我不确定为什么要在使用自动填充为每行<a
做=SUM
时使用VBA。
你也可以使用=OFFSET
函数在没有VBA的情况下进行动态范围,这再次看起来比为它编写宏要容易得多。
但是,如果由于某种原因您坚持使用VBA,请检查this link以获取对您更有意义的方法
答案 2 :(得分:0)
我对此进行了测试并且有效。它假设您有一个不间断的值块,并且KZ是该块的最后一列。
很抱歉,如果region
变量有点罗嗦。如果你愿意,我可以帮你清理一下。
Sub getTotal()
Dim cell As Range
Dim region As Range
Dim total As Integer
Set region = Range("A1").CurrentRegion.Resize(Range("A1").CurrentRegion.Rows.Count, Range("A1").CurrentRegion.Columns.Count - 1)
total = 0
For Each cell In region
total = total + cell.Value
Next
MsgBox (total)
End Sub