2016-05-22 53 views
-1

我正在開發一個excel VBA項目,並試圖創建一個腳本,該腳本將循環遍歷H列中具有貨幣值的所有單元格,並將添加每個後續值以顯示總計在單元格M1中。循環遍歷現有的單元格以查找總和Excel

這是我到目前爲止有:

Sub Loop_Cell_For_Sum() 
    'Selects Cell H2 as First Line in Data 
    Range("H2").Select 
    'A Do Loop set to stop when an empty cell is reached 
    Do Until IsEmpty(ActiveCell) 
    'Creates a Running Total in the M1 Cell 
    Range("M1").Value = Range("M1").Value +ActiveCell.Value 
    'Steps Down 1 Row 
    ActiveCell.Offset(1,0).Select 
    Loop 
End Sub 

我不知道我在哪裏這個問題呢?也許它與我將代碼放在excel中的位置有關?我想讓代碼在後臺自動運行。作爲一個對象,我已經放在表單中了(通過右鍵單擊表單,單擊查看代碼並插入上面的代碼)。

任何和所有的幫助,非常感謝!

謝謝你!

+0

爲什麼不直接使用'= SUM(H2:H1004000)'總和將忽略TE空白字段並沒有使用金額時,沒有損害爲完整的列參考。如果H1是一個標題,那麼你可以使用SUM(H:H)。再次Sum將自動忽略任何文本。但是,如果你真的想要vba,@AshtonMorgan已經給出了一個很好的方法。 –

+0

謝謝你,斯科特。我想我有點過度了。這將是完全有效的 – Shortbus47XYY

回答

0
Sub addColH() 

Dim rng As Range 
Dim cell As Range 
Dim lr As Long 
Dim counter As Double 

lr = Cells(Rows.Count, "H").End(xlUp).Row 
Set rng = Range("H2:H" & lr) 
counter = 0 

For Each cell In rng 
    counter = counter + cell.Value 
Next 

Range("M1").Value = counter 

End Sub 
+0

唯一的問題是OP希望在某些情況發生變化時運行,這可能需要在Worksheet_Change或Worksheet_Calculate事件中進行。 –

+0

謝謝@AshtonMorgan這個解決方案!我很感激! – Shortbus47XYY

+0

這讓@ScottCraner有很大的意義。我認爲這是我獲得一些我的原始代碼運行的問題的一部分。我是VBA noob,但我已經開始研究Worksheet_Change事件,看起來這是我應該朝向的方向。謝謝! – Shortbus47XYY

0

@AshtonMorgan爲上面的問題提供了一個解決方案。但是,正如@ScottCraner指出的那樣,只要有變化,解決方案就不會自動更新。

我已將此解決方案稍微修改爲將其放入Worksheet_Change事件中,以便可能有相同問題並查看此帖子的任何人解決。

所有學分去@AshtonMorgan和@ScottCraner此解決方案:

Private Sub Worksheet_Change(ByVal rng As Range) 
    Dim cell As Range 
    Dim lr As Long 
    Dim counter As Double 

    lr = Cells(Rows.Count, "H").End(xlUp).Row 
    Set rng = Range("H2:H" & lr) 
    counter = 0 

    For Each cell In rng 
    counter = counter + cell.Value 
    Next 

    Range("M1").Value = counter 

End Sub 
+0

你測試過了嗎?它應該給你運行時錯誤'28'超出堆棧空間。有時它也可能會使Excel崩潰。也許是因爲涉及巨大範圍〜H:H〜 – skkakkar

+0

@skkakkar,你說得對。它確實返回運行時間錯誤28,直到至少填滿第一行單元格。之後,它不會使excel崩潰,但確實會大大減緩它的速度。 – Shortbus47XYY

+0

從功能上來說,我希望在VBA中執行此操作的原因,而不是僅僅使用SUM來處理@ScottCraner提到的單元格範圍,這是爲了防止excel在不需要的單元格上運行計算。我明白,通過這種方式循環訪問單元格,我基本上做了同樣的事情,這打破了我的目的。我會繼續研究的東西... – Shortbus47XYY

相關問題