excel vba:将列值汇总到最后一列

时间:2016-08-12 14:48:47

标签: excel vba excel-vba macros

以下是我的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的初学者,所以我不知道如何动态选择范围。

3 个答案:

答案 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

编辑:工作代码示例

enter image description here

答案 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