Dieses Tutorial zeigt Ihnen, wie Sie die Excel-Funktionen ZÄHLENWENN und ZÄHLENWENN in VBA verwenden
VBA verfügt nicht über ein Äquivalent der Funktionen ZÄHLENWENN oder ZÄHLENWENN, die Sie verwenden können - ein Benutzer muss die integrierten Excel-Funktionen in VBA mit dem verwenden ArbeitsblattFunktion Objekt.
ZÄHLENWENN Arbeitsblattfunktion
Das WorksheetFunction-Objekt kann verwendet werden, um die meisten Excel-Funktionen aufzurufen, die im Dialogfeld Funktion einfügen in Excel verfügbar sind. Die ZÄHLENWENN-Funktion ist eine davon.
123 | Unter TestCountIf()Range("D10") = Application.WorksheetFunction.CountIf(Range("D2:D9"), ">5")End Sub |
Das obige Verfahren zählt nur die Zellen im Bereich (D2: D9), wenn sie einen Wert von 5 oder höher haben. Beachten Sie, dass das Kriterium größer als 5 in Klammern stehen muss, da Sie ein Größer-als-Zeichen verwenden.
Zuweisen eines COUNTIF-Ergebnisses zu einer Variablen
Möglicherweise möchten Sie das Ergebnis Ihrer Formel an anderer Stelle im Code verwenden, anstatt es direkt in den Excel-Bereich zurückzuschreiben. In diesem Fall können Sie das Ergebnis einer Variablen zuweisen, die später in Ihrem Code verwendet wird.
1234567 | Sub AssignSumIfVariable()Ergebnis als Double dimmen'Variable zuweisenresult = Application.WorksheetFunction.CountIf(Range("D2:D9"), ">5")'Ergebnis anzeigenMsgBox "Die Anzahl der Zellen mit einem Wert größer als 5 ist" & resultEnd Sub |
ZÄHLENWENN verwenden
Die ZÄHLENWENN-Funktion ähnelt der ZÄHLENWENN-Arbeitsblattfunktion, ermöglicht Ihnen jedoch die Prüfung auf mehr als ein Kriterium. Im folgenden Beispiel zählt die Formel die Anzahl der Zellen in D2 bis D9 hoch, bei denen der Verkaufspreis größer als 6 UND der Einstandspreis größer als 5 ist.
123 | Unter UsingCountIfs()Range("D10") = WorksheetFunction.CountIfs(Range("C2:C9"), ">6", Range("E2:E9"), ">5")End Sub |
COUNTIF mit einem Range-Objekt verwenden
Sie können dem Range-Objekt eine Gruppe von Zellen zuweisen und dieses Range-Objekt dann mit dem ArbeitsblattFunktion Objekt.
123456789 | Unter TestCountIFRange()Dim rngCount als Bereich'Zellbereich zuweisenSetze rngCount = Range("D2:D9")'benutze den Bereich in der FormelRange("D10") = WorksheetFunction.SUMIF(rngCount, ">5")'die Reichweitenobjekte freigebenSetze rngCount = NichtsEnd Sub |
Verwenden von ZÄHLENWENN für Objekte mit mehreren Bereichen
Ebenso können Sie COUNTIFS für mehrere Range-Objekte verwenden.
123456789101112 | Unter TestCountMultipleRanges()Dim rngCriteria1 als BereichDim rngCriteria2 als Bereich'Zellbereich zuweisenSet rngCriteria1= Range("D2:D9")Set rngCriteria2 = Range("E2:E10")'benutze die Bereiche in der FormelRange("D10") = WorksheetFunction.CountIfs(rngCriteria1, ">6", rngCriteria2, ">5")'die Reichweitenobjekte freigebenSetze rngCriteria1 = NichtsSetze rngCriteria2 = NichtsEnd Sub |
ZÄHLENWENN Formel
Wenn Sie das verwenden ArbeitsblattFunktion.COUNTIF Um einem Bereich in Ihrem Arbeitsblatt eine Summe hinzuzufügen, wird ein statischer Wert zurückgegeben, keine flexible Formel. Das bedeutet, wenn sich Ihre Zahlen in Excel ändern, wird der Wert, der von der ArbeitsblattFunktion wird sich nicht ändern.
Im obigen Beispiel hat die Prozedur die Anzahl der Zellen mit Werten im Bereich (D2: D9) gezählt, bei denen der Verkaufspreis größer als 6 ist, und das Ergebnis wurde in D10 eingegeben. Wie Sie in der Bearbeitungsleiste sehen können, handelt es sich bei diesem Ergebnis um eine Zahl und nicht um eine Formel.
Wenn sich einer der Werte in Range(D2:D9) ändert, wird das Ergebnis in D10 NICHT Veränderung.
Anstatt die WorksheetFunction.SumIf, können Sie mit VBA eine SUMIF-Funktion auf eine Zelle anwenden, indem Sie die Formel oder FormelR1C1 Methoden.
Formelmethode
Mit der Formelmethode können Sie gezielt auf einen Zellbereich zeigen, zB: D2:D9 wie unten gezeigt.
123 | Unter TestCountIf()Range("D10").FormulaR1C1 ="=ZÄHLENWENN(D2:D9, "">5"")"End Sub |
FormelR1C1-Methode
Die Methode FormulaR1C1 ist flexibler, da sie Sie nicht auf einen bestimmten Zellbereich einschränkt. Das folgende Beispiel gibt uns die gleiche Antwort wie das obige.
123 | Unter TestCountIf()Range("D10").FormulaR1C1 = "=ZÄHLENWENN(R[-8]C:R[-1]C,"">5"")"End Sub |
Um die Formel jedoch noch flexibler zu gestalten, könnten wir den Code wie folgt ändern:
123 | Unter TestCountIf()ActiveCell.FormulaR1C1 = "=ZÄHLENWENN(R[-8]C:R[-1]C,"">5"")"End Sub |
Wo auch immer Sie sich in Ihrem Arbeitsblatt befinden, die Formel zählt dann die Zellen, die die Kriterien direkt darüber erfüllen, und fügt die Antwort in Ihre ActiveCell ein. Auf den Bereich innerhalb der ZÄHLENWENN-Funktion muss mit der Zeilen- (R) und Spalte (C)-Syntax verwiesen werden.
Mit beiden Methoden können Sie dynamische Excel-Formeln in VBA verwenden.
In D10 gibt es jetzt eine Formel anstelle eines Wertes.
Dein Linktext