在 VBA 中使用 SUM()

问题描述 投票:0回答:5

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

=SUM(Sheet1!A1:A10)

要在子程序中执行此操作,我将使用:

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 中,此行严重失败,如 在 VBA 中指定跨工作表的 Excel 范围中所述:

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()
进行此计算,或者我应该坚持循环?

excel worksheet-function vba
5个回答
7
投票

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

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

范围可以是您喜欢的任何范围。


1
投票

您需要使用循环在所有工作表上执行计算,从外观上看,这是最有效的方法。如上所述,您可以单独输入每个范围。

可能值得将您相加的范围转换为双精度(或单精度、整数等),因为有时 VBA 将数字读取为文本。

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

您遇到

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

要使用

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

希望有帮助。


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

1
投票

我能够让它正常工作:

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

0
投票

我使用了一个非常简单的VBA语句:

MSC = Range("MyScores")
MyTotal = WorksheetFunction.Sum(Range(MSC))

上面的 MyScores 是名为“MyScores”的单元格中的地址范围,这是正常的 Excel 地址公式“Address....”;我的公式如下,但可以更改为所需的任何内容 I4 保存指定的行。

=ADDRESS(I4,CELL("Col",R9),1)&":"&ADDRESS(J4,CELL("Col",R9),1)) 非常适合我。

© www.soinside.com 2019 - 2024. All rights reserved.