VBA SUMIF- und SUMIFS-Funktionen

Dieses Tutorial zeigt Ihnen, wie Sie die Excel-Funktionen SUMIF und SUMIFS in VBA verwenden

VBA hat kein Äquivalent zu den SUMIF- oder SUMIFS-Funktionen, die Sie verwenden können - ein Benutzer muss die integrierten Excel-Funktionen in VBA mit dem ArbeitsblattFunktion Objekt.

SUMIF-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 SUMIF-Funktion ist eine davon.

123 Sub TestSumIf()Range("D10") = Application.WorksheetFunction.SumIf(Range("C2:C9"), 150, Range("D2:D9"))End Sub

Das obige Verfahren addiert die Zellen in Range (D2: D9) nur, wenn die entsprechende Zelle in Spalte C = 150 ist.

Zuweisen eines SUMIF-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 = WorksheetFunction.SumIf(Range("C2:C9"), 150, Range("D2:D9"))'Ergebnis anzeigenMsgBox "Die Summe des Ergebnisses, das dem 150-Verkaufscode entspricht, ist " & resultEnd Sub

Verwenden von SUMIFS

Die SUMIFS-Funktion ähnelt der SUMIF-Arbeitsblattfunktion, ermöglicht jedoch die Überprüfung auf mehr als ein Kriterium. Im folgenden Beispiel möchten wir den Verkaufspreis addieren, wenn der Verkaufscode 150 ist UND der Einstandspreis größer als 2 ist. Beachten Sie, dass in dieser Formel der zu addierende Zellenbereich vor den Kriterien liegt, während in der SUMIF-Funktion ist es hinten.

123 Sub MultipleSumIfs()Range("D10") = WorksheetFunction.SumIfs(Range("D2:D9"), Range("C2:C9"), 150, Range("E2:E9"), ">2")End Sub

Verwenden von SUMIF mit einem Range-Objekt

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

123456789101112 Unter TestSumIFRange()Dim rngCriteria As RangeDim rngSum als Bereich'Zellbereich zuweisenSet rngCriteria = Range("C2:C9")Setze rngSum = Range("D2:D9")'benutze den Bereich in der FormelRange("D10") = WorksheetFunction.SumIf(rngCriteria, 150, rngSum)'die Reichweitenobjekte freigebenSetze rngCriteria = NichtsSetze rngSum = NichtsEnd Sub

Verwenden von SUMIFS für mehrere Bereichsobjekte

Ebenso können Sie SUMIFS für mehrere Range-Objekte verwenden.

123456789101112131415 Unter TestSumMultipleRanges()Dim rngCriteria1 als BereichDim rngCriteria2 als BereichDim rngSum als Bereich'Zellbereich zuweisenSet rngCriteria1= Range("C2:C9")Set rngCriteria2 = Range("E2:E10")Setze rngSum = Range("D2:D10")'benutze die Bereiche in der FormelRange("D10") = WorksheetFunction.SumIfs(rngSum, rngCriteria1, 150, rngCriteria2, ">2")'Entferne das EntfernungsobjektSetze rngCriteria1 = NichtsSetze rngCriteria2 = NichtsSetze rngSum = NichtsEnd Sub

Beachten Sie, dass das Kriterium größer als 2 in Klammern stehen muss, da Sie ein Größer-als-Zeichen verwenden.

SUMIF-Formel

Wenn Sie das verwenden ArbeitsblattFunktion.SUMIF Um einem Bereich in Ihrem Arbeitsblatt eine Summe hinzuzufügen, wird eine statische Summe 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 Range(D2:D9) addiert, wobei der SaleCode in Spalte C gleich 150 ist, und das Ergebnis wurde in D10 eingetragen. 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) oder Range(C2: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:D10, wie unten gezeigt.

123 Sub TestSumIf()Range("D10").FormulaR1C1 = "=SUMIF(C2:C9,150,D2:D9)"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 Sub TestSumIf()Range("D10").FormulaR1C1 = "=SUMIF(R[-8]C[-1]:R[-1]C[-1],150,R[-8]C:R[-1]C )"End Sub

Um die Formel jedoch flexibler zu gestalten, könnten wir den Code so ändern, dass er wie folgt aussieht:

123 Sub TestSumIf()ActiveCell.FormulaR1C1 = "=SUMIF(R[-8]C[-1]:R[-1]C[-1],150,R[-8]C:R[-1]C)"End Sub

Wo auch immer Sie sich in Ihrem Arbeitsblatt befinden, die Formel addiert 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 SUMIF-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.

wave wave wave wave wave