2016-08-12 42 views
0

以下是我的excel格式。excel vba:总结列值到最后一列

KZ是所有列

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| 

Grand Total的在我的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

你只想要'KZ'列的总和?为什么不只是一个简单的Excel“SUM”公式? –

+0

a,b,c ..所有列的总和为KZ。我无法使用简单的公式,因为这是由我的宏动态生成的工作表。 –

+2

你尝试过什么吗?如果是这样,请提供代码,看看[tour](http://stackoverflow.com/tour)和[如何提问](http://stackoverflow.com/help/how-to-ask )。友情提醒:StackOverflow不是“我们为您代码”的服务提供商。 [VBA简介](https://blog.udemy.com/excel-macros-tutorial/)。提示:谷歌设置范围基于标题和总和循环范围Excel VBA – Sgdva

回答

1

这解决了上述情况-in一般订条款─,调整到你的范围/特定期望的结果

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

+0

这只适用于1排。我想循环所有的行(〜1000)。这就是我坚持为所有行申请循环的地方。 –

+0

你甚至尝试过吗?这从列的第一行开始到该列的最后一行 - 对每一列都是这样 - – Sgdva

+0

我真的很抱歉忽略它。我只会测试并更新你。感谢您的评论。 –

0

我不确定为什么你想使用VBA,当你可以使用自动填充为每一行做一个=SUM

您还可以在不使用VBA的情况下使用=OFFSET函数做一个动态范围,该函数再次比为其编写宏要容易得多。

但是,如果出于某种原因,你坚持使用VBA,检查this link对于哪种方法更有意义,你

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