ワークシートに追加するセルのセットがある場合、次の式を使用できます。
_=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)
_
_Sub dural()
v = Application.WorksheetFunction.Sum("Sheet1:Sheet3!B2")
End Sub
_
2つの回避策があります。ループをプログラムすることで合計を計算できます。
_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()
を使用することは可能ですか、それともループを固定する必要がありますか?
Worksheetfunction.sumの問題は、文字列ではなく評価するために引数が必要だと思います。 WorksheetFunction.Sum( "Sheet1!A1:A3")も失敗します。ただし、これは成功します
Application.WorksheetFunction.Sum(Sheet1.Range("A1"), Sheet2.Range("A1"))
範囲は好きなものにできます。
私はちょうどラインでそれを動作させることができました:
Cells(x,y) = WorksheetFunction.sum(range(a,b:a,d))
ループを使用して、すべてのシートで計算を実行する必要があります。これは、物の見た目で最も効率的な方法です。上記のように、代わりに各範囲を個別に入力できます。
VBAは数値をテキストとして読み取ることがあるため、加算する範囲をdouble(またはsingle、integerなど)に変換する価値がある場合があります。
v = v + Cdbl(Sheets(i).Range("B2"))
Application.WorksheetFunction.Sum("Sheet1:Sheet3!B2")
で問題が発生する理由は、その数式をExcelに入力すると、「Sheet1:Sheet3!B2」の範囲がExcelで認識されないためです。
Application.WorksheetFunction
を使用するには、VBA外のExcelで動作する必要があります。
お役に立てば幸いです。
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