2016-05-27 7 views
9

でSUM()を使用する:サブでこれを行うには私は私が追加したいワークシートのセルのセットを持っている場合は、私が式を使用することができVBA

=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 

は、私が式を使用:で説明したように、この行は、無残に失敗したVBAで

=SUM(Sheet1:Sheet38!B2) 

Specify an Excel range across sheets in VBA

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()を使用することが可能であり、または私はループを固執する必要があり、私はループをプログラミングすることによって合計することができますか?

+0

なぜ評価しないのですか? – findwindow

+0

私は長い間このことをしていませんでしたので、試してみるまでこれを答えとして追加しませんが、 'Set r = Sheets(" Sheet1 ")を使う必要はありません。 .Range( "Sheet1:Sheet3!B2") 'し、' r'で 'Sum'を実行しますか?または同様のもの...シートから範囲を作成するために必要な作業。あなたはおそらくあなたの他のアプローチのいずれかを使用してより良いでしょう。 – gmiley

+1

@findwindow私は 'Evaluate()'を使っていますが、うまくいきます。しかし、ダイナミックレンジに基づいて計算する必要がある場合は(*すべてのシートで同じです)*、追加のステップがあります。 (評価版) –

答えて

2

worksheetfunction.sumの問題は、文字列を評価するための引数が必要だと考えています。 WorksheetFunction.Sum( "Sheet1!A1:A3")も失敗します。しかし、これはあなたが好きなことができ

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

範囲を成功します。

+0

.............ありがとうございます............. –

1

すべてのシートにわたって計算を実行するには、ループを使用する必要があります。これは、見た目で最も効率的です。上記のように、代わりにそれぞれの範囲を入力することができます。

倍精度浮動小数点数型(または単精度浮動小数点型など)の範囲を変換する価値があるかもしれませんが、VBAによって数値がテキストとして読み取られることがあるためです。

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

あなたがExcelにその数式を入力すると、範囲ので、あなたがApplication.WorksheetFunction.Sum("Sheet1:Sheet3!B2")で問題を抱えている理由は、「シート1:!シート3 B2」はExcelで認識されません。

enter image description here

それはVBAの外にExcelで動作するように持っているApplication.WorksheetFunctionを使用するには。

希望に役立ちます。

+0

ありがとう! ........................... –

+0

公正であるために、スクリーンショットの範囲にはタイプミスがあります。コロンの前に余分な '! 'があります。 –

関連する問題