【发布时间】:2016-05-27 20:17:49
【问题描述】:
如果我想将工作表中的一组单元格相加,我可以使用公式:
=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() 进行此计算,还是我应该坚持循环?
【问题讨论】:
-
为什么不
evaluate? -
我已经很久没有这样做了,所以在你可以尝试之前我不会添加这个作为答案,但你不应该也使用:
Set r = Sheets("Sheet1").Range("Sheet1:Sheet3!B2")然后在r上做Sum?或类似的......无论你需要做什么来从工作表中创建一个范围。不过,您最好使用其他方法之一。 -
@findwindow 我确实使用
Evaluate(),它工作正常....但是如果我必须根据动态范围计算(所有工作表上相同),那里是制作我必须提供给Evaluate()的字符串的额外步骤 -
您还可以创建两个隐藏的空白工作表“开始”和“完成”,然后将所需的工作表放入书页。然后
v = Evaluate("Sum(START:FINISH!B2)") -
如您所知,但我会放在这里以供将来的观众使用,您可以将 B2 部分替换为动态范围参考。例如,假设您将要设置为变量的范围
rng它将是v = Evaluate("Sum(START:FINISH!" & rng.Address(1,1) & ")")
标签: excel worksheet-function vba