VBA对可变长度列进行求和

时间:2014-08-01 16:50:12

标签: excel vba excel-vba

另一个VBA问题(我最近着火了) 正如标题所说,我试图总结一个可以是可变长度的列,然后将该总和粘贴在单元格F3中,但我遇到了“应用程序或对象定义的错误。”

这是我的代码:

Dim last As Range, sum As Variant

    ActiveSheet.Range("M8").Select
    Set last = Selection.End(xlDown)
    With Worksheets("Data")
        sum = WorksheetFunction.sum(.Range("M8:M" & last))
    End With

    Range("F:3") = sum

4 个答案:

答案 0 :(得分:2)

With Worksheets("Data")
    .Range("F3").Value = Application.Sum(.Range(.Range("M8"), .Range("M8").End(xlDown))
End With

答案 1 :(得分:0)

使用您的方法,last需要为您指定行号的Long。

Dim last As Long
Dim sum As Long

ActiveSheet.Range("M8").Select
last = Selection.End(xlDown).Row
With Worksheets("Data")
  sum = WorksheetFunction.sum(.Range("M8:M" & last))
End With

Range("F3") = sum

您也可以使用

更高效地完成这项工作
last = ActiveSheet.Range("M8").End(xlDown).Row

并且不使用Select。

答案 2 :(得分:0)

使用此功能可以稳定地计算从单元格向下的非空单元格。

' Enumerate non-empty cells down the rows.
Public Function CountRows(ByRef r As Range) As Long
    If IsEmpty(r) Then
        CountRows = 0
    ElseIf IsEmpty(r.Offset(1, 0)) Then
        CountRows = 1
    Else
        CountRows = r.Worksheet.Range(r, r.End(xlDown)).Rows.Count
    End If
End Function

答案 3 :(得分:0)

有一种非VBA方式。在单元格F3中输入以下内容:

=SUM(OFFSET($M$8,0,0,COUNTA(M:M),1))

注意 - 这假设M列的唯一内容是您要求和的数字