VBA SUMIF- en SUMIFS-functies

Deze tutorial laat je zien hoe je de Excel SUMIF- en SUMIFS-functies in VBA gebruikt

VBA heeft geen equivalent van de SUMIF- of SUMIFS-functies die u kunt gebruiken - een gebruiker moet de ingebouwde Excel-functies in VBA gebruiken met behulp van de Werkbladfunctie object.

SUMIF-werkbladfunctie

Het object WorksheetFunction kan worden gebruikt om de meeste Excel-functies aan te roepen die beschikbaar zijn in het dialoogvenster Functie invoegen in Excel. De SUMIF-functie is er een van.

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

De bovenstaande procedure telt alleen de cellen in Bereik (D2:D9) op als de corresponderende cel in kolom C = 150.

Een SUMIF-resultaat toewijzen aan een variabele

Misschien wilt u het resultaat van uw formule ergens anders in de code gebruiken in plaats van het rechtstreeks terug te schrijven naar en Excel-bereik. Als dit het geval is, kunt u het resultaat toewijzen aan een variabele om later in uw code te gebruiken.

1234567 Sub AssignSumIfVariable()Dim resultaat als Double'Wijs de variabele toe'resultaat = WerkbladFunctie.SumIf(Bereik("C2:C9"), 150, Bereik("D2:D9"))'Toon het resultaat'MsgBox "Het totaal van het resultaat dat overeenkomt met de 150 verkoopcode is " & resultaatEinde sub

SOMMEN gebruiken

De SOMMEN-functie is vergelijkbaar met de SOM.ALS-werkbladfunctie, maar u kunt er meer dan één criterium mee controleren. In het onderstaande voorbeeld willen we de verkoopprijs optellen als de verkoopcode 150 is EN de kostprijs groter is dan 2. Merk op dat in deze formule het celbereik dat moet worden opgeteld vóór de criteria staat, terwijl in de SUMIF-functie staat het achter.

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

SUMIF gebruiken met een bereikobject

U kunt een groep cellen aan het Range-object toewijzen en dat Range-object vervolgens gebruiken met de WerkbladFunctie object.

123456789101112 Sub TestSumIFRange()Dim rngCriteria als bereikDim rngSum als bereik'het bereik van cellen toewijzen'Stel rngCriteria = Bereik ("C2:C9") inStel rngSum = Bereik ("D2:D9") in'gebruik het bereik in de formule'Range("D10") = WerkbladFunctie.SumIf(rngCriteria, 150, rngSum)'laat de bereikobjecten los'Stel rngCriteria = Niets inStel rngSum = Niets inEinde sub

SUMIFS gebruiken op objecten met meerdere bereiken

Op dezelfde manier kunt u SUMIFS gebruiken op meerdere Range Objects.

123456789101112131415 SubtestSumMultipleRanges()Dim rngCriteria1 Als bereikDim rngCriteria2 als bereikDim rngSum als bereik'het bereik van cellen toewijzen'Stel rngCriteria1= Bereik ("C2:C9") inStel rngCriteria2 = Bereik ("E2:E10") inStel rngSum = Bereik ("D2:D10") in'gebruik de bereiken in de formule'Range("D10") = WorksheetFunction.SumIfs(rngSum, rngCriteria1, 150, rngCriteria2, ">2")'laat het bereikobject los'Stel rngCriteria1 = Niets inStel rngCriteria2 = Niets inStel rngSum = Niets inEinde sub

Merk op dat omdat u een groter dan-teken gebruikt, de criteria groter dan 2 tussen haakjes moeten staan.

SUMIF-formule

Wanneer u de WerkbladFunctie.SUMIF om een ​​som toe te voegen aan een bereik in uw werkblad, wordt een statische som geretourneerd, geen flexibele formule. Dit betekent dat wanneer uw cijfers in Excel veranderen, de waarde die is geretourneerd door de WerkbladFunctie zal niet veranderen.

In het bovenstaande voorbeeld heeft de procedure Range (D2:D9) opgeteld, waarbij de SaleCode gelijk is aan 150 in kolom C, en het resultaat is in D10 geplaatst. Zoals u in de formulebalk kunt zien, is dit resultaat een cijfer en geen formule.

Als een van de waarden verandert in Bereik (D2:D9) of Bereik (C2:D9), zal het resultaat in D10 NIET verandering.

In plaats van de WerkbladFunctie.SumIf, kunt u VBA gebruiken om een ​​SUMIF-functie op een cel toe te passen met behulp van de Formule of FormuleR1C1 methoden.

Formule Methode:

Met de formulemethode kunt u specifiek naar een celbereik verwijzen, bijvoorbeeld: D2:D10, zoals hieronder weergegeven.

123 Sub TestSumIf()Bereik ("D10").FormuleR1C1 = "=SUMIF(C2:C9,150,D2:D9)"Einde sub

FormuleR1C1-methode

De FormulaR1C1-methode is flexibeler omdat deze u niet beperkt tot een bepaald celbereik. Het onderstaande voorbeeld geeft ons hetzelfde antwoord als het bovenstaande.

123 Sub TestSumIf()Bereik ("D10").FormuleR1C1 = "=SUMIF(R[-8]C[-1]:R[-1]C[-1],150,R[-8]C:R[-1]C )"Einde sub

Om de formule echter flexibeler te maken, kunnen we de code aanpassen om er als volgt uit te zien:

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

Waar u ook bent in uw werkblad, de formule zal dan de cellen optellen die voldoen aan de criteria er direct boven en het antwoord in uw ActiveCell plaatsen. Naar het bereik binnen de SUMIF-functie moet worden verwezen met behulp van de syntaxis Rij (R) en Kolom (C).

Met beide methoden kunt u dynamische Excel-formules gebruiken binnen VBA.

Er komt nu een formule in D10 in plaats van een waarde.

wave wave wave wave wave