2016-08-12 36 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