如果我想在工作表中添加一组单元格,我可以使用以下公式:
=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()
进行此计算,还是应该坚持循环?
答案 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”范围。
要使用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))