Excel VBA与动态范围的总和

时间:2017-12-05 15:24:26

标签: excel vba excel-vba

我尝试创建一个excel宏来计算A列中值的总和,使用一定的动态范围。

下面包含的基本excel示例截图:

Excel snapshot

最终目标是循环B列中的单元格直到" 0"到达了。当一个" 0"到达,在该行的A列中,计算A列中所有值的总和,直到新的" 0"到达B列。 所以在这个基本的例子中,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

谢谢:)

1 个答案:

答案 0 :(得分:1)

认为这样做你想要的。它使用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