Excel VBA总和dynamic范围

我试图创build一个Excelmacros,计算列A中的值的总和,使用一定的dynamic范围。

基本的excel例子截图如下:

Excel快照

最终目标是循环遍历B列中的单元格直到达到“0”。 当达到“0”时,在同一行的列A中,计算列A中所有值的和,直到达到列B中新的“0”。 所以在这个基本的例子中,A1应该包含= sum(A2:A7),并且A8应该包含值A9到A14的和。

到目前为止,我的进展包括如下,在所有的VBA的东西仍然是非常新的。

Sub sumtill0() ' ' sumtill0 Macro ' ' Cells(ActiveCell.Row, 1).Select If Sheets("Blad1").Cells(2, 1).Value = nil And Sheets("Blad1").Cells(2, 1).Value <> "0" Then Sheets("Blad1").Activate Cells(2, 1).Range("A1").Select Else Dim artTekst As String If Sheets("Blad1").Cells(1, 2).Value = "0" Then Sheets("Blad1").Cells(1, 1).Fomula = "=SUM()" Else If Sheets("Blad1").Cells(1, 2).End(xlDown).Value = "0" Then Sheets("Blad1").Cells(1, 1).End(xlDown).Offset(1, 0).Value = "0" Sheets("Blad1").Cells(1, 1).End(xlDown).Fomula = "=SUM(???)" ActiveCell.Value = Sheets("Blad1").Cells(1, 2).End(xlDown).Offset(0, -2).Value End If End If End If End Sub 

谢谢 :)

认为这是你想要的。 它使用Find方法来查找连续的零并在每对之间求和。 如果它循环回到起始值,它将和最低值(不知道如果B中的第一个值不为零会发生什么)。

 Sub x() Dim rFind As Range, s As String, r1 As Range With Range("B1", Range("B" & Rows.Count).End(xlUp)) Set rFind = .Find(What:=0, After:=.Cells(.Cells.Count), LookIn:=xlFormulas, _ Lookat:=xlWhole, SearchDirection:=xlNext, searchFormat:=False) If Not rFind Is Nothing Then s = rFind.Address Do Set r1 = rFind Set rFind = .FindNext(rFind) If rFind.Address = s Then Set rFind = .Cells(.Cells.Count) r1.Offset(, -1).Value = Application.Sum(Range(r1.Offset(1, -1), rFind.Offset(, -1))) Exit Sub End If r1.Offset(, -1).Value = Application.Sum(Range(r1.Offset(1, -1), rFind.Offset(-1, -1))) Loop While rFind.Address <> s End If End With End Sub