2017-09-11 503 views
0

我有下面的代码找到第一个空白单元格并在最后一个空白单元格下面的数据求和。Excel VBA - 如何找到空白单元格和从活动单元格到空白单元格的总和

Dim r As Range 
Dim lngRowStart As Long 
If Range("A1").Formula <> "" Then 
    lngRowStart = 1 
Else 
    lngRowStart = Range("A1").End(xlDown).Row 
End If 
    Set r = Cells(lngRowStart, 1).End(xlDown).Offset(1, 0) 
If Left(r.Offset(-1, 0).Formula, 1) <> "=" Then 
     r.FormulaR1C1 = "=Subtotal(9,R[-" & r.Row - lngRowStart & "]C:R[-1]C)" 
End If 

但这假定数据是在列A和用于所述第一组连续的数据的,如何修改它的任何有源单元来总结以上连续数据?

例如:

2 

4 

3 

Blank (SUM ABOVE=9) 

1 

3 

2 

Blank (SUM ABOVE=6) 

回答

0

您可以使用下面的UDF(代码的注释中说明):

Function SumContinRange(CurCell As Range) As Double  
    Dim RngStart As Range, SumRng As Range   

    If CurCell <> "" Then 
     ' find the first empty cell using the Find function 
     Set RngStart = Columns(CurCell.Column).Find(what:="", After:=CurCell, LookIn:=xlValues) 
    Else 
     ' find the first empty cell using the Find function 
     Set RngStart = Columns(CurCell.Column).Find(what:="", After:=CurCell, LookIn:=xlValues, SearchDirection:=xlPrevious) 
    End If 

    ' set the Sum Range 
    Set SumRng = Range(RngStart.Offset(-1, 0), RngStart.Offset(-1, 0).End(xlUp)) 

    SumContinRange = WorksheetFunction.Sum(SumRng) ' return this value 
End Function 

然后,使用下面的Sub经过ActiveCell测试:

Sub TestFunc() 

If ActiveCell.Value <> "" Then 
    ActiveCell.End(xlDown).Offset(1) = SumContinRange(ActiveCell) 
Else 
    ActiveCell = SumContinRange(ActiveCell) 
End If 

End Sub 
相关问题