VBA SUMIF och SUMIFS funktioner

Denna handledning visar dig hur du använder Excel SUMIF och SUMIFS -funktionerna i VBA

VBA har inte motsvarande SUMIF- eller SUMIFS -funktioner som du kan använda - en användare måste använda de inbyggda Excel -funktionerna i VBA med hjälp av WorkSheetFunction objekt.

SUMIF -arbetsbladFunktion

Objektet WorksheetFunction kan användas för att anropa de flesta Excel -funktioner som är tillgängliga i dialogrutan Infoga funktion i Excel. SUMIF -funktionen är en av dem.

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

Proceduren ovan lägger bara till cellerna i intervall (D2: D9) om motsvarande cell i kolumn C = 150.

Tilldela en SUMIF -resultat till en variabel

Du kanske vill använda resultatet av din formel någon annanstans i koden istället för att skriva den direkt tillbaka till och Excel Range. Om så är fallet kan du tilldela resultatet till en variabel som ska användas senare i din kod.

1234567 Sub AssignSumIfVariable ()Dim resultat som dubbel'Tilldela variabelnresult = WorksheetFunction.SumIf (Range ("C2: C9"), 150, Range ("D2: D9"))'Visa resultatetMsgBox "Summan av resultatet som matchar 150 försäljningskoden är" & resultatAvsluta Sub

Använda SUMIFS

SUMIFS -funktionen liknar SUMIF WorksheetFunction men den låter dig söka efter mer än ett kriterium. I exemplet nedan vill vi lägga till försäljningspriset om försäljningskoden är 150 OCH Kostnadspriset är större än 2. Observera att i denna formel är cellintervallet som ska läggas upp framför kriterierna, medan i SUMIF -funktionen ligger den bakom.

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

Använda SUMIF med ett intervallobjekt

Du kan tilldela en grupp celler till Range -objektet och sedan använda det Range -objektet med ArbetsbladFunktion objekt.

123456789101112 Sub TestSumIFRange ()Dim rngCriteria As RangeDim rngSum som intervall'tilldela cellintervalletStäll in rngCriteria = Range ("C2: C9")Ställ in rngSum = Range ("D2: D9")'använd intervallet i formelnRange ("D10") = WorksheetFunction.SumIf (rngCriteria, 150, rngSum)'släpp räckviddsobjektenAnge rngCriteria = IngentingAnge rngSum = IngentingAvsluta Sub

Använda SUMIFS på objekt med flera intervall

På samma sätt kan du använda SUMIFS på flera intervallobjekt.

123456789101112131415 Sub TestSumMultipleRanges ()Dim rngCriteria1 As RangeDim rngCriteria2 som intervallDim rngSum som intervall'tilldela cellintervalletStäll in rngCriteria1 = Range ("C2: C9")Ange rngCriteria2 = Område ("E2: E10")Ställ in rngSum = Range ("D2: D10")'använd intervallet i formelnRange ("D10") = WorksheetFunction.SumIfs (rngSum, rngCriteria1, 150, rngCriteria2, "> 2")'släpp intervallobjektetSet rngCriteria1 = IngentingSet rngCriteria2 = IngentingAnge rngSum = IngentingAvsluta Sub

Lägg märke till att eftersom du använder ett tecken med större än måste kriterierna större än 2 ligga inom parentes.

SUMIF Formula

När du använder ArbetsbladFunktion.SUMIF för att lägga till en summa i ett intervall i ditt kalkylblad, returneras en statisk summa, inte en flexibel formel. Det betyder att när dina siffror i Excel ändras, värdet som har returnerats av ArbetsbladFunktion kommer inte att förändras.

I exemplet ovan har proceduren lagt till intervall (D2: D9) där SaleCode är 150 i kolumn C och resultatet sattes i D10. Som du kan se i formelfältet är detta resultat en siffra och inte en formel.

Om något av värdena ändras i antingen intervall (D2: D9) eller intervall (C2: D9), kommer resultatet i D10 att INTE förändra.

Istället för att använda ArbetsbladFunktion.SumIf, kan du använda VBA för att tillämpa en SUMIF -funktion på en cell med Formel eller FormelR1C1 metoder.

Formelmetod

Med formelmetoden kan du peka specifikt på ett cellintervall, t.ex.: D2: D10 enligt nedan.

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

FormelR1C1 -metod

FormulaR1C1 -metoden är mer flexibel eftersom den inte begränsar dig till ett bestämt cellintervall. Exemplet nedan ger oss samma svar som ovan.

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

För att göra formeln mer flexibel kan vi dock ändra koden så här:

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

Var du än befinner dig i kalkylbladet kommer formeln att lägga till cellerna som uppfyller kriterierna direkt ovanför det och placera svaret i din ActiveCell. Området inuti SUMIF -funktionen måste hänvisas till med syntaxen Rad (R) och Kolumn (C).

Båda dessa metoder gör att du kan använda dynamiska Excel -formler inom VBA.

Det kommer nu att finnas en formel i D10 istället för ett värde.

wave wave wave wave wave