Deze tutorial laat je zien hoe je de Excel COUNTIF en COUNTIFS functies in VBA gebruikt
VBA heeft geen equivalent van de AANTAL.ALS- of AANTAL.ALS-functies die u kunt gebruiken - een gebruiker moet de ingebouwde Excel-functies in VBA gebruiken met behulp van de Werkbladfunctie object.
AANTAL.ALS-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 AANTAL.ALS-functie is er een van.
123 | Sub TestCountIf()Range("D10") = Application.WorksheetFunction.CountIf(Range("D2:D9"), ">5")Einde sub |
De bovenstaande procedure telt alleen de cellen in Bereik (D2:D9) als ze een waarde van 5 of hoger hebben. Merk op dat omdat u een groter dan-teken gebruikt, de criteria groter dan 5 tussen haakjes moeten staan.
Een AANTAL.ALS-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 = Application.WorksheetFunction.CountIf(Range("D2:D9"), ">5")'Toon het resultaat'MsgBox "Het aantal cellen met een waarde groter dan 5 is " & resultaatEinde sub |
AANTALLEN.ALS gebruiken
De AANTAL.ALS-functie is vergelijkbaar met de AANTAL.ALS-werkbladfunctie, maar u kunt er meer dan één criterium mee controleren. In het onderstaande voorbeeld telt de formule het aantal cellen in D2 op tot D9 waar de Verkoopprijs groter is dan 6 EN de Kostprijs groter is dan 5.
123 | Sub gebruikenCountIfs()Range("D10") = WorksheetFunction.CountIfs(Range("C2:C9"), ">6", Range("E2:E9"), ">5")Einde sub |
AANTAL.ALS gebruiken met een bereikobject
U kunt een groep cellen aan het Range-object toewijzen en dat Range-object vervolgens gebruiken met de WerkbladFunctie object.
123456789 | Sub TestCountIFRange()Dim rngCount as Range'het bereik van cellen toewijzen'Stel rngCount = Bereik ("D2:D9") in'gebruik het bereik in de formule'Range("D10") = WerkbladFunctie.SUMIF(rngCount, ">5")'laat de bereikobjecten los'Stel rngCount = Niets inEinde sub |
AANTALLEN.ALS gebruiken op objecten met meerdere bereiken
Op dezelfde manier kunt u AANTALLEN.ALS gebruiken voor meerdere bereikobjecten.
123456789101112 | Sub TestCountMultipleRanges()Dim rngCriteria1 Als bereikDim rngCriteria2 als bereik'het bereik van cellen toewijzen'Stel rngCriteria1= Bereik ("D2:D9") inStel rngCriteria2 = Bereik ("E2:E10") in'gebruik de bereiken in de formule'Range("D10") = WorksheetFunction.CountIfs(rngCriteria1, ">6", rngCriteria2, ">5")'laat de bereikobjecten los'Stel rngCriteria1 = Niets inStel rngCriteria2 = Niets inEinde sub |
AANTAL.ALS-formule
Wanneer u de WerkbladFunctie.AANTAL.ALS om een som toe te voegen aan een bereik in uw werkblad, wordt een statische waarde 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 het aantal cellen geteld met waarden in Bereik (D2:D9) waarbij de verkoopprijs groter is dan 6, en het resultaat werd in D10 gezet. Zoals u in de formulebalk kunt zien, is dit resultaat een cijfer en geen formule.
Als een van de waarden in Bereik (D2:D9) verandert, 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:D9, zoals hieronder weergegeven.
123 | Sub TestCountIf()Bereik ("D10").FormulaR1C1 ="=AANTAL.ALS(D2:D9, "">5"")"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 TestCountIf()Bereik ("D10").FormuleR1C1 = "= AANTAL.ALS(R[-8]C:R[-1]C,"">5"")"Einde sub |
Om de formule echter nog flexibeler te maken, kunnen we de code aanpassen om er als volgt uit te zien:
123 | Sub TestCountIf()ActiveCell.FormulaR1C1 = "=AANTAL.ALS(R[-8]C:R[-1]C,"">5"")"Einde sub |
Waar u ook bent in uw werkblad, de formule telt dan de cellen die voldoen aan de criteria er direct boven en plaatst het antwoord in uw ActiveCell. Het bereik binnen de AANTAL.ALS-functie moet worden verwezen met behulp van de rij (R) en kolom (C) syntaxis.
Met beide methoden kunt u dynamische Excel-formules gebruiken binnen VBA.
Er komt nu een formule in D10 in plaats van een waarde.
Uw linktekst