Mit SUM() in VBA

Wenn ich einen Satz von Zellen in einem Arbeitsblatt, das möchte ich hinzufügen bin, kann ich die Formel verwenden:

=SUM(Sheet1!A1:A10)

Dazu in einer sub, die ich benutzen würde:

Sub example1()
    Dim r As Range, v As Variant

    Set r = Sheets("Sheet1").Range("A1:A10")
    v = Application.WorksheetFunction.Sum(r)
End Sub

Wenn, ich möchte jedoch hinzufügen, bis eine einzelne Zelle über viele Arbeitsblätter, verwende ich die Formel:

=SUM(Sheet1:Sheet38!B2)

Im VBA diese Zeile scheitert kläglich, wie beschrieben in der Geben Sie eine Excel-Bereich über die Blätter in VBA:

Sub dural()
    v = Application.WorksheetFunction.Sum("Sheet1:Sheet3!B2")
End Sub

Habe ich zwei workarounds. Ich kann die Summe durch Programmierung einer Schleife:

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

oder mit Evaluate():

v = Evaluate("Sum(Sheet1:Sheet3!B2)")

Ist es möglich Application.WorksheetFunction.Sum() für diese Berechnung, oder sollte ich stick die Schleife?

  • Warum nicht evaluate?
  • Ich habe nicht getan, alle von diesem in einer langen Zeit, also werde ich nicht hinzufügen, das als Antwort, bis Sie können es versuchen, aber nicht die müssen Sie auch nutzen: Set r = Sheets("Sheet1").Range("Sheet1:Sheet3!B2") tun, und dann Sum auf r? Oder ähnliches... was auch immer Sie tun müssen, erstellen Sie einen Bereich aus den Blättern. Du bist wahrscheinlich besser dran mit einem Ihrer anderen Ansätze aber.
  • Ich verwende Evaluate() und es funktioniert einwandfrei....aber wenn ich die Berechnung basiert auf einem dynamischen Bereich (auf allen Platten), ist es eine zusätzliche Schritt macht die Zeichenfolge, die ich versorgen muss Evaluate()
  • Danke für die Idee, etwas ich kann nicht scheinen, um ein Range-Objekt, das aus Zellen von verschiedenen Blättern.
  • Könnten Sie einen benannten Bereich, der den Blatt-Namen, die Sie wollen, dann verwenden Sie diese Formel =SUMPRODUCT(SUM(INDIRECT("'" & sheetrng & "'!B2"))) wo sheetrng ist der benannte Bereich. Offensichtlich müssen Sie es konvertieren in einen string für die Evaluate-Methode.
  • danke..........Ich werde darüber nachdenken müssen, wie Sie zu erstellen, dass den Benannten Bereich....................
  • Sie können auch zwei versteckte leere Blatt "START" und "Ende" und Buchstütze der Blätter, die Sie wollen. Dann v = Evaluate("Sum(START:FINISH!B2)")
  • Danke für die Anregung.................Es funktioniert gut, da alle Daten der Blätter in der Arbeitsmappe zusammengefasst sind, sowieso.
  • Und wie Sie wissen, aber ich werde hier für die Zukunft die Zuschauer, Sie können ersetzen Sie die B2 Teil mit einem Dynamikumfang Referenz. Zum Beispiel, sagen, dass Sie den Bereich, den Sie festlegen möchten, wie eine variable rng es wäre v = Evaluate("Sum(START:FINISH!" & rng.Address(1,1) & ")")
  • DASS ES GENAGELT !!................es behandelt sowohl den dynamischen Bereich und die variable Blätter Problem..............DANKE!

Schreibe einen Kommentar