Denna handledning kommer att visa dig hur du använder Excel -räknefunktionen i VBA
Funktionen VBA COUNT används för att räkna antalet celler i ditt kalkylblad som har värden i dem. Den nås med hjälp av WorksheetFunction -metoden i VBA.
COUNT ArbetsbladFunktion
Objektet WorksheetFunction kan användas för att anropa de flesta Excel -funktioner som är tillgängliga i dialogrutan Infoga funktion i Excel. Räkningsfunktionen är en av dem.
123 | Sub TestCountFunctinoRange ("D33") = Application.WorksheetFunction.Count (Range ("D1: D32"))Avsluta Sub |
Du kan ha upp till 30 argument i funktionen RÄKTA. Var och en av argumenten måste referera till ett cellområde.
Detta exempel nedan kommer att räkna hur många celler som fylls med värden i cellerna D1 till D9
123 | Sub TestCount ()Range ("D10") = Application.WorksheetFunction.Count (Range ("D1: D9"))Avsluta Sub |
Exemplet nedan räknar hur många värden som finns i ett område i kolumn D och i ett område i kolumn F. Om du inte skriver applikationsobjektet antas det.
123 | Sub TestCountMultiple ()Range ("G8") = WorksheetFunction.Count (Range ("G2: G7"), Range ("H2: H7"))Avsluta Sub |
Tilldela en räkningsresultat 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 AssignCount ()Dim resultat Som heltal'Tilldela variabelnresult = WorksheetFunction.Count (intervall ("H2: H11"))'Visa resultatetMsgBox "Antalet celler som fylls med värden är" & resultatAvsluta Sub |
RÄKTA med ett intervallobjekt
Du kan tilldela en grupp celler till Range -objektet och sedan använda det Range -objektet med ArbetsbladFunktion objekt.
123456789 | Sub TestCountRange ()Dim rng As Range'tilldela cellintervalletStäll in rng = Range ("G2: G7")'använd intervallet i formelnRange ("G8") = WorksheetFunction.Count (rng)'släpp intervallobjektetStäll in rng = ingentingAvsluta Sub |
RÄKTA flera intervallobjekt
På samma sätt kan du räkna hur många celler som fylls med värden i flera intervallobjekt.
123456789101112 | Sub TestCountMultipleRanges ()Dim rngA As RangeDim rngB som intervall'tilldela cellintervalletStäll in rngA = Range ("D2: D10")Ställ in rngB = Range ("E2: E10")'använd intervallet i formelnRange ("E11") = WorksheetFunction.Count (rngA, rngB)'släpp intervallobjektetStäll in rngA = ingentingStäll in rngB = IngentingAvsluta Sub |
Använda COUNTA
Räkningen räknar bara VÄRDEN i celler, den räknar inte cellen om cellen har text i den. För att räkna cellerna som fylls med någon form av data, skulle vi behöva använda COUNTA -funktionen.
123 | Sub TestCountA ()Range ("B8) = Application.WorksheetFunction.CountA (Range (" B1: B6 "))Avsluta Sub |
I exemplet nedan skulle funktionen RÄKTA returnera en nolla eftersom det inte finns några värden i kolumn B, medan den skulle returnera en 4 för kolumn C. RÄNTA -funktionen skulle dock räkna cellerna med text i och skulle returnera ett värde på 5 i kolumn B medan värdet 4 fortfarande visas i kolumn C.
Använda COUNTBLANKS
COUNTBLANKS -funktionen räknar bara de tomma cellerna i cellintervallet - det vill säga celler som inte har någon data alls.
123 | Sub TestCountBlank ()Range ("B8) = Application.WorksheetFunction.CountBlanks (Range (" B1: B6 "))Avsluta Sub |
I exemplet nedan har kolumn B inga tomma celler medan kolumn C har en tom cell.
Använda COUNTIF -funktionen
En annan kalkylbladsfunktion som kan användas är funktionen COUNTIF.
123456 | Sub TestCountIf ()Range ("H14") = WorksheetFunction.CountIf (Range ("H2: H10"), "> 0")Range ("H15") = WorksheetFunction.CountIf (Range ("H2: H10"), "> 100")Range ("H16") = WorksheetFunction.CountIf (Range ("H2: H10"), "> 1000")Range ("H17") = WorksheetFunction.CountIf (Range ("H2: H10"), "> 10000")Avsluta Sub |
Proceduren ovan räknar bara cellerna med värden i om kriterierna matchas - större än 0, större än 100, större än 1000 och större än 10000. Du måste sätta kriterierna inom citattecken för att formeln ska fungera korrekt.
Nackdelar med WorksheetFunction
När du använder ArbetsbladFunktion för att räkna värdena i ett intervall i kalkylbladet returneras ett statiskt värde, 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 TestCount räknat upp cellerna i kolumn H där ett värde finns. Som du kan se i formelfältet är detta resultat en siffra och inte en formel.
Om något av värdena därför ändras i intervallet (H2: H12), kommer resultaten i H14 INTE förändra.
Istället för att använda WorksheetFunction.Count, kan du använda VBA för att tillämpa en räkningsfunktion på en cell med Formel eller FormelR1C1 metoder.
Med hjälp av formelmetoden
Med formelmetoden kan du peka specifikt på ett cellintervall, t.ex.: H2: H12 som visas nedan.
123 | Sub TestCountFormulaOmråde ("H14"). Formel = "= Antal (H2: H12)"Avsluta Sub |
Använda FormulaR1C1 -metoden
Metoden FromulaR1C1 är mer flexibel eftersom den inte begränsar dig till ett angivet cellintervall. Exemplet nedan ger oss samma svar som ovan.
123 | Sub TestCountFormula ()Område ("H14"). Formel = "= Count (R [-9] C: R [-1] C)"Avsluta Sub |
För att göra formeln mer flexibel kan vi dock ändra koden så här:
123 | Sub TestCountFormula ()ActiveCell.FormulaR1C1 = "= Antal (R [-11] C: R [-1] C)"Avsluta Sub |
Var du än befinner dig i kalkylbladet kommer formeln sedan att räkna värdena i de 12 cellerna direkt ovanför det och placera svaret i din ActiveCell. Området inuti funktionen RÄKTA 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 H14 istället för ett värde.