在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中工作。
希望有所帮助。