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

Forumthread: SUMIF mit mehreren Bedingungen

SUMIF mit mehreren Bedingungen
24.01.2020 16:24:51
Bo
Hallo,
ich möchte eine SUMMEWENN-Funktion mit mehreren Bedingungen, die ich im normalen Excel schon realisiert habe, nun in VBA umsetzen. Ich weiß man könnte einfach die Zellen runterziehen, aber ich benötige es in VBA:
In Schleife i in wsS
und in Schleife n in wsE
Bed.1: wsS.cells(i,3).value=wsE.cells(n,3).value
Bed.2: wsS.cells(i,4).value=wsE.cells(n,4).value
Bed.3: wsE.cells(n,7).value= "U"
Dann Addiere wsE.cells(n,10).value zu dem bestehenden Wert in wsS.cells(i,13).value
Nächster Eintrag in wsE
'=SUMMEWENNS(E!J:J;E!C:C;S!C3;E!D:D;S!D3;E!G:G;"U")
ich blicke da nicht zu 100% in der SUMIF-Syntax durch. Über Hilfe würde ich mich extrem freuen.
Sub SummeU()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Dim wsS As Worksheet, wsE As Worksheet
Dim i As Integer, n As Integer
Set wsS = ThisWorkbook.Worksheets("S")
Set wsE = ThisWorkbook.Worksheets("E")
n = 3
i = 3
While wsS.Cells(i, 3).Value  ""
wsS.Cells(i, 13).Value = Application.WorksheetFunction.SumIfs(wsE.Cells(i, 10). _
Value, wsE.Cells(i, 3).Value, wsS.Cells(n, 3), wsE.Cells(i, 4), wsS.Cells(n, 4), wsE.Cells(i, 7), "U")
Wend
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.Calculation = xlAutomatic
Application.EnableEvents = True
End Sub

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: SUMIF mit mehreren Bedingungen
24.01.2020 16:41:00
Daniel
HI
naja, im Prinzip ganz einfach:
1. Parameter: die Spalte, die du summieren willst
2. Parameter: die Spalte für die die erste Bedingung
3. Parameter: die erste Bedingung
4. Parameter: die Spalte für die zweite Bedingung
5. Parameter: die zweite Bedingung
usw dann immer abwechselnd: Spalte, Bedingung
du machst in deinem VBA-Code den Fehler, dass du anstelle der Spalten immer nur Einzelwerte angibst, dh das ganze müsste so aussehen:
wsS.Cells(i, 13).Value = Application.WorksheetFunction.SumIfs(wsE.Columns(10), wsE.Columns(3), wsS.Cells(n, 3), wsE.Columns(4), wsS.Cells(n, 4).value, wsE.Columns(7), "U")
ein weiterer Fehler ist, dass du zwar eine Schleife mit While-Wend aufbaust, aber in der Schleife nichts veränderst.
damit schreibst du halt einfach nur sehr oft in die selbe Zelle den gleichen Wert.
dh du müsstest n und i noch innerhalb der Schleife irgendwie verändern (n = n + 1, i = i + 1)
wobei das vorgehen, das du hier vor hast, in VBA Unsinn ist.
es ist immer besser, mit der Formel zu arbeiten, weil man bei der Formel alle Zellen in einem Schritt bearbeiten kann, während du hier jede Zelle einzeln beschreibst, was in Excel viel Zeit braucht.
gruß Daniel
Anzeige
AW: SUMIF mit mehreren Bedingungen
27.01.2020 08:00:08
Bo
Hallo Daniel,
vielen Dank für die schnelle Hilfe. Ich versuche, mich nach und nach mit VBA vertraut zu machen, da greife ich gerne auf die schon bekannten Sachen zurück. Danke für das drauf aufmerksam machen, da muss ich nochmal etwas probieren.
Liebe Grüße
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

SUMIF mit mehreren Bedingungen in VBA


Schritt-für-Schritt-Anleitung

Um eine SUMMEWENN-Funktion mit mehreren Bedingungen in VBA zu verwenden, kannst du die Application.WorksheetFunction.SumIfs-Methode verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne das VBA-Editor: Drücke ALT + F11 in Excel.

  2. Erstelle ein neues Modul: Klicke auf Einfügen > Modul.

  3. Füge den folgenden Code ein:

    Sub SummeU()
       Application.DisplayAlerts = False
       Application.ScreenUpdating = False
       Application.Calculation = xlCalculationManual
       Application.EnableEvents = False
    
       Dim wsS As Worksheet, wsE As Worksheet
       Dim i As Integer, n As Integer
    
       Set wsS = ThisWorkbook.Worksheets("S")
       Set wsE = ThisWorkbook.Worksheets("E")
    
       n = 3
       i = 3
    
       While wsS.Cells(i, 3).Value <> ""
           wsS.Cells(i, 13).Value = Application.WorksheetFunction.SumIfs(wsE.Columns(10), _
               wsE.Columns(3), wsS.Cells(i, 3), wsE.Columns(4), wsS.Cells(i, 4), _
               wsE.Columns(7), "U")
           i = i + 1
           n = n + 1
       Wend
    
       Application.DisplayAlerts = True
       Application.ScreenUpdating = True
       Application.Calculation = xlAutomatic
       Application.EnableEvents = True
    End Sub
  4. Bearbeite die Bedingungen: Stelle sicher, dass du die richtigen Zellreferenzen für deine Daten verwendest.


Häufige Fehler und Lösungen

  1. Fehlerhafte Zellreferenzen: Stelle sicher, dass du in der SUMIFS-Funktion die Spalten korrekt angibst. Beispielsweise solltest du statt wsE.Cells(i, 10).Value die gesamten Spalten wsE.Columns(10) verwenden.

  2. Schleifenverhalten: Wenn du eine Schleife verwendest, stelle sicher, dass du die Schleifenvariablen (i und n) aktualisierst, damit du nicht in einer Endlosschleife steckst.

  3. Falsche Summe: Überprüfe, ob die Bedingungen korrekt sind. Wenn du mit SUMIF oder SUMIFS arbeitest, müssen die Bedingungen in der richtigen Reihenfolge angegeben werden.


Alternative Methoden

Eine effektive Alternative zu VBA ist die Verwendung von Excel-Formeln direkt in den Zellen. Zum Beispiel kannst du folgende Formel verwenden:

=SUMMEWENNS(E!J:J; E!C:C; S!C3; E!D:D; S!D3; E!G:G; "U")

Diese Formel summiert alle Werte in Spalte J, die die angegebenen Bedingungen in den Spalten C, D und G erfüllen.


Praktische Beispiele

Hier ist ein praktisches Beispiel zur Anwendung von SUMIF in VBA:

Sub BeispielSummeWenn()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Daten")

    Dim result As Double
    result = Application.WorksheetFunction.SumIf(ws.Range("A:A"), "Kriterium", ws.Range("B:B"))

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

Dieses Beispiel summiert die Werte in Spalte B, wenn der entsprechende Wert in Spalte A dem Kriterium entspricht.


Tipps für Profis

  • Verwende SUMIFS statt SUMIF: Wenn du mehrere Bedingungen hast, ist SUMIFS die bessere Wahl, da sie effizienter arbeitet.
  • Lege die Daten in Tabellenform an: Das erleichtert die Anwendung von Formeln und macht den Code übersichtlicher.
  • Nutze Option Explicit: Setze dies am Anfang deines Moduls, um sicherzustellen, dass alle Variablen deklariert sind, was Fehler verhindert.

FAQ: Häufige Fragen

1. Wie kann ich SUMIF in Excel verwenden?
Du kannst die SUMIF-Funktion direkt in einer Zelle verwenden, indem du die Syntax angibst: =SUMIF(Bereich; Kriterium; Summe_Bereich).

2. Was ist der Unterschied zwischen SUMIF und SUMIFS?
SUMIF wird verwendet, um eine Summe basierend auf einer einzigen Bedingung zu bilden, während SUMIFS für mehrere Bedingungen geeignet ist.

3. Kann ich SUMIF auch in VBA verwenden?
Ja, du kannst die Application.WorksheetFunction.SumIf oder Application.WorksheetFunction.SumIfs in deinem VBA-Code verwenden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige