Rückkehr in VBA-Code-Beispiele

VBA-Funktionen COUNTIF und COUNTIFS

Dieses Tutorial zeigt Ihnen, wie Sie die Excel-Funktionen COUNTIF und COUNTIFS (Deutsch: ZÄHLENWENN & ZÄHLENWENNS) in VBA verwenden können.

VBA verfügt nicht über ein Äquivalent zu den Excel-Funktionen COUNTIF und COUNTIFS. Stattdessen müssen Sie die Excel-Funktionen über das WorkSheetFunction-Objekt aufrufen.

Die COUNTIF-Arbeitsblattfunktion

Das WorksheetFunction-Objekt kann verwendet werden, um die meisten Excel-Funktionen aufzurufen, die im Dialogfenster „Funktion einfügen“ in Excel verfügbar sind. Die Funktion COUNTIF ist eine von ihnen.

Sub CountIf_Test()
   Range("D10") = Application.WorksheetFunction.CountIf(Range("D2:D9"), ">5")
End Sub

Die obige Prozedur zählt nur die Zellen in Range(D2:D9), die einen Wert von 5 oder höher enthalten. Da Sie ein Größer-als-Zeichen verwenden, muss das Kriterium „>5“ in Klammern gesetzt werden. vba countif verwendung beispiel

Zuweisung eines COUNTIF-Ergebnisses einer Variablen

Möglicherweise möchten Sie das Ergebnis Ihrer Formel an anderer Stelle im Code verwenden, anstatt es direkt in einen Excel-Bereich zurückzuschreiben. In diesem Fall können Sie das Ergebnis einer Variablen zuweisen, die Sie später in Ihrem Code verwenden können.

Sub CountIf_Variable_Zuweisen()
   Dim ergebnis As Double
'Die Variable zuweisen
   ergebnis = Application.WorksheetFunction.CountIf(Range("D2:D9"), ">5")
'Das Ergebnis anzeigen
  MsgBox "Die Anzahl der Zellen mit einem Wert größer als 5 beträgt " & ergebnis
End Sub

vba beispiel countif variable

COUNTIFS verwenden

Die Funktion COUNTIFS ähnelt der Arbeitsblattfunktion COUNTIF. Sie ermöglicht es Ihnen jedoch, mehr als ein Kriterium zu überprüfen. Im folgenden Beispiel wird die Formel die Anzahl der Zellen in D2 bis D9 zählen, in denen der Verkaufspreis größer als 6 UND der Einkaufspreis größer als 5 ist.

Sub Verwendung_CountIfs()
   Range("D10") = WorksheetFunction.CountIfs(Range("C2:C9"), ">6", Range("E2:E9"), ">5")
End Sub

vba countifs verwendung beispiel

Verwendung von COUNTIF mit einem Range-Objekt

Sie können eine Gruppe von Zellen dem Range-Objekt zuweisen und dieses dann mit dem WorksheetFunction-Objekt verwenden.

Sub CountIf_Bereich_Test()
   Dim Bereich_Zaehlen as Range
'Den Zellenbereich zuweisen
   Set Bereich_Zaehlen = Range("D2:D9")
'Den Bereich in der Formel verwenden
   Range("D10") = WorksheetFunction.SUMIF(Bereich_Zaehlen, ">5")
'Die Bereichsobjekte freigeben
  Set Bereich_Zaehlen = Nothing
End Sub

Verwendung von COUNTIFS für mehrere Bereichsobjekte

Auf ähnliche Weise können Sie COUNTIFS auf mehrere Range-Objekte anwenden.

Sub CountIfs_Mehrere_Bereiche_Test() 
   Dim bereich_Kriterien1 As Range 
   Dim bereich_Kriterien2 As Range

'den Zellenbereich zuweisen 
   Set bereich_Kriterien1= Range("D2:D9")
   Set bereich_Kriterien2 = Range("E2:E10")
   
'Die Bereiche in der Formel verwenden 
  Range("D10") = WorksheetFunction.CountIfs(bereich_Kriterien1, ">6", bereich_Kriterien2, ">5")

'die Bereichsobjekte freigeben
  Set bereich_Kriterien1 = Nothing
  Set bereich_Kriterien2 = Nothing
End Sub

COUNTIF-Formel

Wenn Sie die WorksheetFunction.COUNTIF verwenden, um eine Summe zu einem Bereich in Ihrem Arbeitsblatt hinzuzufügen, wird ein statischer Wert zurückgegeben (keine flexible Formel). Das bedeutet, dass sich der von der WorksheetFunction zurückgegebene Wert nicht ändert, wenn sich Ihre Zahlen in Excel ändern.

vba countif verwendung statisch

Im obigen Beispiel hat die Prozedur die Anzahl der Zellen mit Werten im Range(D2:D9) gezählt, in denen der Verkaufspreis größer als 6 ist, und das Ergebnis wurde in D10 eingetragen. Wie Sie in der Formelleiste sehen können, handelt es sich bei diesem Ergebnis um eine Zahl und nicht um eine Formel.

Wenn sich einer der Werte in Bereich(D2:D9) ändert, wird sich das Ergebnis in D10 NICHT ändern.

Anstatt die WorksheetFunction.SumIf zu verwenden, können Sie mit VBA eine COUNTIF-Funktion auf eine Zelle anwenden, indem Sie die Formel- oder FormelR1C1-Methoden anwenden.

Formelmethode

Mit der Formelmethode können Sie speziell auf einen Bereich von Zellen verweisen, z. B. D2:D9, wie unten gezeigt.

Sub CountIf_Test()
  Range("D10").Formula ="=COUNTIF(D2:D9, "">5"")"
End Sub

vba countif formelbereiche

FormulaR1C1-Methode

Die Methode FormulaR1C1 ist insofern flexibler,  da Sie nicht auf einen bestimmten Bereich von Zellen beschränkt ist. Das folgende Beispiel liefert die gleiche Antwort wie das obige.

Sub CountIf_Test()
   Range("D10").FormulaR1C1 = "=COUNTIF(R[-8]C:R[-1]C,"">5"")"
End Sub

vba countif verwendung dynamisch

Um die Formel noch flexibler zu gestalten, könnten wir den Code jedoch folgendermaßen ändern:

Sub CountIf_Test() 
   ActiveCell.FormulaR1C1 = "=COUNTIF(R[-8]C:R[-1]C,"">5"")"
End Sub

Unabhängig davon, wo Sie sich in Ihrem Arbeitsblatt befinden, zählt die Formel dann die Zellen, die die Kriterien direkt über ihr erfüllen, und platziert die Antwort in Ihrer aktuellen Zelle (ActiveCell). Der Bereich innerhalb der Funktion COUNTIF muss mit der Syntax Zeile (R) und Spalte (C) bezeichnet werden.

Mit diesen beiden Methoden können Sie dynamische Excel-Formeln in VBA verwenden.

In D10 befindet sich nun eine Formel anstelle eines Wertes.