在VBA中使用SUM()

时间:2016-05-27 20:17:50

标签: excel excel-vba worksheet-function vba

如果我想在工作表中添加一组单元格,我可以使用以下公式:

=SUM(Sheet1!A1:A10)

要在sub中执行此操作,我会使用:

Sub example1()
    Dim r As Range, v As Variant

    Set r = Sheets("Sheet1").Range("A1:A10")
    v = Application.WorksheetFunction.Sum(r)
End Sub

但是,如果我想在多个工作表中添加单个单元格,我使用以下公式:

=SUM(Sheet1:Sheet38!B2)

在VBA中,这一行失败了,如Specify an Excel range across sheets in VBA

中所述
Sub dural()
    v = Application.WorksheetFunction.Sum("Sheet1:Sheet3!B2")
End Sub

我有两个解决方法。我可以通过编程循环得到总和:

Sub example2()
    Dim i As Long
    Dim v As Variant

    v = 0
    For i = 1 To 38
        v = v + Sheets(i).Range("B2")
    Next i
End Sub

或使用Evaluate()

v = Evaluate("Sum(Sheet1:Sheet3!B2)")

是否可以使用Application.WorksheetFunction.Sum()进行此计算,还是应该坚持循环?

4 个答案:

答案 0 :(得分:3)

我认为workheetfunction.sum的问题是它需要参数来评估不是字符串。 WorksheetFunction.Sum(" Sheet1!A1:A3")也失败了。但是,这成功了

Application.WorksheetFunction.Sum(Sheet1.Range("A1"), Sheet2.Range("A1"))

范围可以是你喜欢的任何东西。

答案 1 :(得分:1)

您需要使用循环来执行所有工作表的计算,这是最有效的方式。如上所述,您可以分别键入每个范围。

可能值得转换您加到双倍(或单个,整数等)的范围,因为有时VBA会将数字作为文本读取。

v = v + Cdbl(Sheets(i).Range("B2"))

您遇到Application.WorksheetFunction.Sum("Sheet1:Sheet3!B2")问题的原因是,如果您在Excel中输入该公式,excel将无法识别“Sheet1:Sheet3!B2”范围。

enter image description here

要使用Application.WorksheetFunction,必须在VBA之外的Excel中工作。

希望有所帮助。

答案 2 :(得分:1)

 Sub SumWorksheets()
    Dim ws As Worksheet
    Dim v As Variant
    For Each ws In ThisWorkbook.Worksheets
'    If ws.Name <> ThisWorkbook.ActiveSheet.Name Then ' (Sum other sheets only)
    If ws.Name <> "" Then
    Application.DisplayAlerts = False
    v = v + ws.Range("B2")
    Application.DisplayAlerts = True
    End If
    Next ws
    MsgBox v
    End Sub

答案 3 :(得分:1)

我能够按行运行它:

Cells(x,y) = WorksheetFunction.sum(range(a,b:a,d))