在VBA中使用SUM()

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

=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()进行这个计算,还是应该坚持循环?

我相信工作表function.sum的问题是它需要参数来评估不是string。 WorksheetFunction.Sum(“Sheet1!A1:A3”)也失败。 但是,这个成功了

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

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

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

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

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

Application.WorksheetFunction.Sum("Sheet1:Sheet3!B2")出现问题的原因是因为如果您将该公式input到Excel中,那么范围“Sheet1:Sheet3!B2”将不会被Excel识别。

在这里输入图像描述

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

希望有所帮助。