Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: SumIfs in VBA

SumIfs in VBA
09.09.2015 07:42:27
Bonduca
Hallo.
Ich möchte die Summe bilden, wenn mehrere Kriterien (Arg 3 und Arg 5) erfüllt sind.
Wenn die gleiche Zahl wie Arg3 in dem Bereich Arg2 gefunden wird und zugleich der Wert in Arg5 im Bereich Arg4 gefunden wird, dann soll die Summe des Bereichs Arg1 gebildet werden.
SumIfs (oder Summewenns) wird folgendermaßen auf der Office Seite erklärt:
Summewenns(Summenbereich, Kriterienbereich1, Kriterium1, Kriteriumbereich2, Kriterium2)
Leider habe ich irgendeinen Fehler in meinen Code
Set ws1 = Worksheets("Tabelle2")
Set ws2 = Worksheets("Tabelle1")
For i = 3 To 20000
varResult = Application.WorksheetFunction.SumIfs( _
Arg1:=ws1.Range(ws1.Cells(4, 8), ws1.Cells(50000, 8)), _
Arg2:=ws1.Range(ws1.Cells(4, 9), ws1.Cells(50000, 9)), _
Arg3:=ws2.Cells(i, 9), _
Arg4:=ws1.Range(ws1.Cells(4, 1), ws1.Cells(50000, 1)), _
Arg5:=ws2.Cells(i, 2)))
Next i
Kann jemand anhand des Codes sehen woran es liegen könnte?
Ich bekomme einen Syntaxfehler :(

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: SumIfs in VBA
09.09.2015 08:10:26
fcs
Hallo Bonduca,
du hattest eine Klammer zu viel am Ende des Ausdrucks.
Bei 20000 Schleifendurchläufen wird Excel aber einige Zeit beschäftigt sein.
Gruß
Franz
Sub VieleSummeWenns()
'Variablendeklarationen
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim i As Long
Dim varResult As Double
Set ws1 = Worksheets("Tabelle2")
Set ws2 = Worksheets("Tabelle1")
For i = 3 To 10 '20000 zum Testen auf 10 Zeilen reduziert
varResult = Application.WorksheetFunction.SumIfs( _
Arg1:=ws1.Range(ws1.Cells(4, 8), ws1.Cells(50000, 8)), _
Arg2:=ws1.Range(ws1.Cells(4, 9), ws1.Cells(50000, 9)), _
Arg3:=ws2.Cells(i, 9), _
Arg4:=ws1.Range(ws1.Cells(4, 1), ws1.Cells(50000, 1)), _
Arg5:=ws2.Cells(i, 2))
ws2.Cells(i, 1) = varResult     'Testzeile
Next i
End Sub

Anzeige
AW: SumIfs in VBA
09.09.2015 08:17:51
Bonduca
Danke fcs.
Das Problem sitzt ja meistens doch vor dem Computer :D

AW: SumIfs in VBA
09.09.2015 08:16:20
Bonduca
Ah. Ich habs selbst gefunden.
Ich hab einfach bei Arg5 eine Klammer zu viel ;).
So einfach kanns manchmal sein.
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

SumIfs in VBA nutzen


Schritt-für-Schritt-Anleitung

  1. Variablen deklarieren: Zuerst musst Du die benötigten Variablen deklarieren. In diesem Fall benötigst Du zwei Arbeitsblätter und eine Schleifenvariable.

    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim i As Long
    Dim varResult As Double
  2. Arbeitsblätter zuweisen: Weise die Arbeitsblätter zu, die Du verwenden möchtest. Zum Beispiel:

    Set ws1 = Worksheets("Tabelle2")
    Set ws2 = Worksheets("Tabelle1")
  3. Schleife erstellen: Erstelle eine Schleife, die über einen definierten Bereich iteriert:

    For i = 3 To 20000
  4. SumIfs-Funktion verwenden: Verwende die Application.WorksheetFunction.SumIfs-Methode, um die Summe basierend auf mehreren Kriterien zu berechnen:

    varResult = Application.WorksheetFunction.SumIfs( _
       Arg1:=ws1.Range(ws1.Cells(4, 8), ws1.Cells(50000, 8)), _
       Arg2:=ws1.Range(ws1.Cells(4, 9), ws1.Cells(50000, 9)), _
       Arg3:=ws2.Cells(i, 9), _
       Arg4:=ws1.Range(ws1.Cells(4, 1), ws1.Cells(50000, 1)), _
       Arg5:=ws2.Cells(i, 2))
  5. Ergebnis speichern: Speichere das Ergebnis in einem Zellenbereich:

    ws2.Cells(i, 1) = varResult
  6. Schleife beenden: Schließe die Schleife mit Next i.


Häufige Fehler und Lösungen

  • Syntaxfehler: Achte darauf, dass Du keine überflüssigen Klammern setzt. Ein häufiger Fehler ist, dass am Ende des SumIfs-Aufrufs eine Klammer zu viel steht.

  • Leistungsprobleme: Bei großen Schleifen kann die Ausführung lange dauern. Teste zunächst mit einer reduzierten Anzahl von Zeilen, z.B. von 3 bis 10.


Alternative Methoden

  • SumIf statt SumIfs: Wenn Du nur ein Kriterium hast, kannst Du Application.WorksheetFunction.SumIf verwenden, was die Berechnung beschleunigen kann.

    varResult = Application.WorksheetFunction.SumIf(ws1.Range("B:B"), ws2.Cells(i, 2), ws1.Range("A:A"))
  • Array-Formeln: Für komplexe Berechnungen können auch Array-Formeln verwendet werden. Diese sind jedoch in VBA etwas schwieriger zu implementieren.


Praktische Beispiele

Hier ist ein einfaches Beispiel, das zeigt, wie Du mehrere Kriterien mit SumIfs in VBA verwenden kannst:

Sub BeispielSumIfs()
    Dim ws As Worksheet
    Set ws = Worksheets("Daten")

    Dim summe As Double
    summe = Application.WorksheetFunction.SumIfs(ws.Range("C:C"), ws.Range("A:A"), "Kriterium1", ws.Range("B:B"), "Kriterium2")

    MsgBox "Die Summe beträgt: " & summe
End Sub

In diesem Beispiel summierst Du Werte aus Spalte C, wenn die Kriterien in Spalte A und B erfüllt sind.


Tipps für Profis

  • Debugging: Nutze die Debugging-Tools in VBA, um sicherzustellen, dass Deine Schleifen und Bedingungen korrekt funktionieren.

  • Performance: Überlege, ob Du die Berechnungen in einer Batch-Verarbeitung statt in einer Schleife durchführen kannst, um die Performance zu verbessern.

  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung, um unerwartete Fehler während der Ausführung abzufangen.


FAQ: Häufige Fragen

1. Wie kann ich mehrere Kriterien in SumIfs verwenden?
Du kannst mehrere Kriterien angeben, indem Du die entsprechenden Bereiche und Kriterien in der SumIfs-Funktion auflistest.

2. Was kann ich tun, wenn ich einen Syntaxfehler erhalte?
Überprüfe Deinen Code auf überflüssige Klammern oder falsche Argumente. Achte darauf, dass Du die Syntax genau befolgst.

3. Kann ich SumIfs auch mit anderen Datenformaten verwenden?
Ja, SumIfs kann mit verschiedenen Datentypen verwendet werden, solange die Kriterien korrekt definiert sind.

4. Wie kann ich die Performance beim Arbeiten mit großen Datenmengen verbessern?
Verwende möglichst kurze Schleifen und teste Deine Codes mit weniger Daten, um die Ausführungsgeschwindigkeit zu optimieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige