我尝试创建一个excel宏来计算A列中值的总和,使用一定的动态范围。
下面包含的基本excel示例截图:
最终目标是循环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
谢谢:)
答案 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