VBA AANTAL.ALS en AANTAL.ALS Functies

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

wave wave wave wave wave