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.