VBA SUMIF og SUMIFS funktioner

Denne vejledning viser dig, hvordan du bruger Excel SUMIF- og SUMIFS -funktionerne i VBA

VBA har ikke en ækvivalent til de SUMIF- eller SUMIFS -funktioner, du kan bruge - en bruger skal bruge de indbyggede Excel -funktioner i VBA ved hjælp af WorkSheetFunction objekt.

SUMIF -regnearkFunktion

WorksheetFunction -objektet kan bruges til at kalde de fleste Excel -funktioner, der er tilgængelige i dialogboksen Indsæt funktion i Excel. SUMIF -funktionen er en af ​​dem.

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

Fremgangsmåden ovenfor vil kun tilføje cellerne i område (D2: D9), hvis den tilsvarende celle i kolonne C = 150.

Tildeling af et SUMIF -resultat til en variabel

Du vil måske bruge resultatet af din formel andre steder i koden frem for at skrive det direkte tilbage til og Excel -område. Hvis dette er tilfældet, kan du tildele resultatet til en variabel, der skal bruges senere i din kode.

1234567 Sub AssignSumIfVariable ()Dim resultat som dobbelt'Tildel variablenresult = WorksheetFunction.SumIf (Range ("C2: C9"), 150, Range ("D2: D9"))'Vis resultatetMsgBox "Det samlede resultat, der matcher 150 salgskoden, er" & resultatAfslut Sub

Brug af SUMIFS

SUMIFS -funktionen ligner SUMIF -regnearksfunktionen, men det giver dig mulighed for at kontrollere mere end ét kriterium. I eksemplet nedenfor søger vi at lægge salgsprisen sammen, hvis salgskoden er 150 OG kostprisen er større end 2. Bemærk, at i denne formel er celleområdet, der skal tilføjes, foran kriterierne, hvorimod i SUMIF -funktionen er den bagud.

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

Brug af SUMIF med et områdeobjekt

Du kan tildele en gruppe celler til Range -objektet og derefter bruge dette Range -objekt med ArbejdsarkFunktion objekt.

123456789101112 Sub TestSumIFRange ()Dim rngCriteria As RangeDim rngSum som Range'tildele celleområdetIndstil rngCriteria = Range ("C2: C9")Indstil rngSum = Range ("D2: D9")'brug området i formlenOmråde ("D10") = WorksheetFunction.SumIf (rngCriteria, 150, rngSum)'frigiv rækkeviddeobjekterneIndstil rngCriteria = IntetIndstil rngSum = IntetAfslut Sub

Brug af SUMIFS på objekter med flere områder

På samme måde kan du bruge SUMIFS på flere områdeobjekter.

123456789101112131415 Sub TestSumMultipleRanges ()Dim rngCriteria1 As RangeDim rngCriteria2 som områdeDim rngSum som Range'tildele celleområdetIndstil rngCriteria1 = Range ("C2: C9")Indstil rngCriteria2 = Range ("E2: E10")Indstil rngSum = Range ("D2: D10")'brug intervallerne i formlenOmråde ("D10") = WorksheetFunction.SumIfs (rngSum, rngCriteria1, 150, rngCriteria2, "> 2")'frigiv rækkeviddeobjektetSet rngCriteria1 = IntetSet rngCriteria2 = IntetIndstil rngSum = IntetAfslut Sub

Bemærk, at fordi du bruger et større end -tegn, skal kriterierne større end 2 være inden for parentes.

SUMIF formel

Når du bruger ArbejdsarkFunktion.SUMIF for at tilføje en sum til et område i dit regneark returneres en statisk sum, ikke en fleksibel formel. Det betyder, at når dine tal i Excel ændres, den værdi, der er returneret af ArbejdsarkFunktion vil ikke ændre sig.

I eksemplet ovenfor har proceduren tilføjet Range (D2: D9), hvor SaleCode er lig med 150 i kolonne C, og resultatet blev sat i D10. Som du kan se i formellinjen, er dette resultat en figur og ikke en formel.

Hvis nogen af ​​værdierne ændres i enten område (D2: D9) eller område (C2: D9), vil resultatet i D10 IKKE lave om.

I stedet for at bruge RegnearkFunktion.SumIf, kan du bruge VBA til at anvende en SUMIF -funktion på en celle ved hjælp af Formel eller FormelR1C1 metoder.

Formel metode

Formelmetoden giver dig mulighed for at pege specifikt på en række celler, f.eks .: D2: D10 som vist nedenfor.

123 Sub TestSumIf ()Område ("D10"). FormulaR1C1 = "= SUMIF (C2: C9,150, D2: D9)"Afslut Sub

FormulaR1C1 Metode

FormulaR1C1 -metoden er mere fleksibel, idet den ikke begrænser dig til et bestemt antal celler. Nedenstående eksempel vil give os det samme svar som ovenstående.

123 Sub TestSumIf ()Område ("D10"). FormelR1C1 = "= SUMIF (R [-8] C [-1]: R [-1] C [-1], 150, R [-8] C: R [-1] C ) "Afslut Sub

For at gøre formlen mere fleksibel kunne vi dog ændre koden til at se sådan ud:

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

Uanset hvor du er i dit regneark, vil formlen derefter tilføje de celler, der opfylder kriterierne direkte over det, og placere svaret i din ActiveCell. Området inde i SUMIF -funktionen skal henvises til ved brug af rækken (R) og kolonnen (C).

Begge disse metoder giver dig mulighed for at bruge dynamiske Excel -formler inden for VBA.

Der vil nu være en formel i D10 i stedet for en værdi.

wave wave wave wave wave