以下是我的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初学者,所以我不知道如何动态选择范围。
这解决了所述情况 - 一般而言 - 调整到您的范围/特定的期望结果
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
编辑:工作代码示例
我不确定为什么要使用 VBA,因为您可以使用自动填充为每一行执行
=SUM
。
您也可以在没有 VBA 的情况下使用
=OFFSET
函数来实现动态范围,这似乎比为其编写宏要容易得多。
但是,如果出于某种原因您坚持使用 VBA,请检查 此链接,了解哪种方法对您更有意义
我测试了这个,它有效。它假设您有一个不间断值块,并且 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