Vba 在现有单元格中循环查找Sum Excel

Vba 在现有单元格中循环查找Sum Excel,vba,excel,Vba,Excel,我正在处理一个excel VBA项目,并试图创建一个脚本,该脚本将循环遍历H列中具有货币值的所有单元格,并将每个后续值相加,以显示M1单元格中的总计 这就是我到目前为止所做的: 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

我正在处理一个excel VBA项目,并试图创建一个脚本,该脚本将循环遍历H列中具有货币值的所有单元格,并将每个后续值相加,以显示M1单元格中的总计

这就是我到目前为止所做的:

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中放置代码的位置有关?我希望代码在后台自动运行。我已将其作为对象放置在图纸中(通过在图纸上单击鼠标右键,单击“查看代码”,然后插入上述代码)

非常感谢您的任何帮助


多谢各位

@AshtonMorgan为我的上述问题提供了一个解决方案。然而,正如@ScottCraner所指出的,解决方案不会在发生变化时自动更新

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
我只是稍微修改了一下这个解决方案,把它放在一个工作表中,供任何可能有相同问题并查看此帖子的人使用

此解决方案的所有积分归@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

为什么不直接使用
=SUM(H2:H1004000)
SUM将忽略te空白字段,并且在使用SUM进行完整列引用时不会造成任何损害。如果H1是一个标题,那么您可以使用SUM(H:H)。再次,Sum将自动忽略任何文本。但是如果你真的想要vba,@AshtonMorgan提供了一个很好的方法。谢谢你,Scott。我想我有点想过头了。这将是完全有效的唯一一件事是OP希望在任何事情发生变化时运行此功能,这可能需要在工作表\u更改或工作表\u计算事件中。感谢@AshtonMorgan提供此解决方案!我很感激!这很有道理@ScottCraner。我认为这是我在运行一些原始代码时遇到的问题的一部分。我是一个VBA noob,但我已经开始研究工作表的变化事件,看起来这是我应该朝的方向。谢谢你彻底测试过了吗。它应该会给您堆栈空间不足的运行时错误“28”。有时它也会崩溃。也许是因为~H:H~@skkakkar涉及的范围很大,你是对的。在至少填充第一行单元格之前,它会返回运行时错误28。之后,它不会使excel崩溃,但会大大降低速度。从功能上讲,我之所以想在VBA中这样做,而不是只对@ScottCraner提到的单元格范围使用SUM,是为了防止excel在不需要的单元格上运行计算。我明白,以这种方式在细胞中循环,我基本上是在做同样的事情,这违背了我的目的。一些我将继续研究的事情…如果我们为某些操作禁用事件,并在所需操作后重新启用事件,这可能是可能的。工作表更改事件后对单元格的任何操作都会立即影响操作。既然你已经接受了这里的答案,请发布一个新问题。也许是我或其他一些更有知识的专家帮助解决这个问题。