Ši pamoka parodys, kaip naudoti „Excel COUNTIF“ ir „COUNTIFS“ funkcijas VBA
VBA neturi funkcijų COUNTIF arba COUNTIFS, kurias galite naudoti - vartotojas turi naudoti integruotas „Excel“ funkcijas VBA, naudodamas „WorkSheetFunction“ objektas.
COUNTIF darbalapio funkcija
„WorksheetFunction“ objektu galima iškviesti daugumą „Excel“ funkcijų, kurios pasiekiamos „Excel“ dialogo lange Įterpti funkciją. Funkcija COUNTIF yra viena iš jų.
123 | Sub TestCountIf ()Diapazonas ("D10") = Application.WorksheetFunction.CountIf (Diapazonas ("D2: D9"), "> 5")Pabaiga Sub |
Aukščiau pateikta procedūra skaičiuos diapazono (D2: D9) ląsteles tik tuo atveju, jei jų vertė yra 5 ar didesnė. Atkreipkite dėmesį, kad kadangi naudojate didesnį nei ženklą, kriterijai, didesni nei 5, turi būti skliausteliuose.
COUNTIF rezultato priskyrimas kintamajam
Galbūt norėsite savo formulės rezultatą naudoti kitoje kodo vietoje, o ne rašyti tiesiai atgal į „Excel“ diapazoną. Tokiu atveju galite priskirti rezultatą kintamajam, kuris bus naudojamas vėliau jūsų kode.
1234567 | Sub AssignSumIfVariable ()Neryškus rezultatas kaip dvigubas'Priskirkite kintamąjįrezultatas = Application.WorksheetFunction.CountIf (Diapazonas ("D2: D9"), "> 5")'Parodyk rezultatąMsgBox "Ląstelių, kurių vertė didesnė nei 5, skaičius" ir rezultatasPabaiga Sub |
Naudojant COUNTIFS
Funkcija COUNTIFS yra panaši į COUNTIF WorksheetFunction, tačiau ji leidžia patikrinti daugiau nei vieną kriterijų. Žemiau pateiktame pavyzdyje formulė suskaičiuos langelių skaičių nuo D2 iki D9, kur pardavimo kaina yra didesnė nei 6, o savikaina - didesnė nei 5.
123 | Sub UsingCountIfs ()Diapazonas ("D10") = WorksheetFunction.CountIfs (Diapazonas ("C2: C9"), "> 6", Diapazonas ("E2: E9"), "> 5")Pabaiga Sub |
COUNTIF naudojimas su diapazono objektu
Galite priskirti langelių grupę objektui „Range“, o tada naudoti tą diapazono objektą su Darbo lapas Funkcija objektas.
123456789 | Sub TestCountIFRange ()Dim rngCount kaip diapazonas“priskirti ląstelių diapazonąNustatyti rngCount = Diapazonas („D2: D9“)'naudokite diapazoną formulėjeDiapazonas ("D10") = WorksheetFunction.SUMIF (rngCount, "> 5")“paleiskite diapazono objektusNustatyti rngCount = NiekoPabaiga Sub |
COUNTIFS naudojimas kelių diapazonų objektuose
Panašiai galite naudoti COUNTIFS keliuose diapazono objektuose.
123456789101112 | Sub TestCountMultipleRanges ()Dim rngCriteria1 As RangeDim rngCriteria2 kaip diapazonas“priskirti ląstelių diapazonąNustatykite rngCriteria1 = Diapazonas ("D2: D9")Nustatykite rngCriteria2 = Diapazonas ("E2: E10")'naudokite formulės diapazonusDiapazonas ("D10") = WorksheetFunction.CountIfs (rngCriteria1, "> 6", rngCriteria2, "> 5")“paleiskite diapazono objektusNustatyti rngCriteria1 = NiekoNustatykite rngCriteria2 = NiekoPabaiga Sub |
COUNTIF formulė
Kai naudojate WorksheetFunction.COUNTIF Norėdami pridėti sumą prie savo darbalapio diapazono, grąžinama statinė vertė, o ne lanksti formulė. Tai reiškia, kad pasikeitus „Excel“ skaičiams, vertė, kurią grąžino Darbo lapas Funkcija nepasikeis.
Anksčiau pateiktame pavyzdyje procedūra apskaičiavo langelių, kurių vertės yra diapazone (D2: D9), kai pardavimo kaina yra didesnė nei 6, kiekį, o rezultatas buvo nurodytas D10. Kaip matote formulės juostoje, šis rezultatas yra figūra, o ne formulė.
Jei kuri nors iš reikšmių pasikeičia diapazone (D2: D9), rezultatas bus nurodytas D10 NE keistis.
Užuot naudoję WorksheetFunction.SumIf, galite naudoti VBA, kad pritaikytumėte SUMIF funkciją langeliui naudodami Formulė arba Formulė R1C1 metodus.
Formulės metodas
Formulės metodas leidžia konkrečiai nurodyti langelių diapazoną, pvz .: D2: D9, kaip parodyta žemiau.
123 | Sub TestCountIf ()Diapazonas ("D10"). FormulėR1C1 = "= COUNTIF (D2: D9," "> 5" ")"Pabaiga Sub |
Formulės R1C1 metodas
„FormulaR1C1“ metodas yra lankstesnis, nes neapsiriboja tam tikru ląstelių diapazonu. Žemiau pateiktas pavyzdys suteiks mums tą patį atsakymą, kaip ir aukščiau.
123 | Sub TestCountIf ()Diapazonas ("D10"). FormulėR1C1 = "= COUNTIF (R [-8] C: R [-1] C," "> 5" ")Pabaiga Sub |
Tačiau, kad formulė būtų dar lankstesnė, kodą galėtume pakeisti taip:
123 | Sub TestCountIf ()ActiveCell.FormulaR1C1 = "= COUNTIF (R [-8] C: R [-1] C," "> 5" ")Pabaiga Sub |
Kad ir kur esate savo darbalapyje, formulė suskaitys tiesiogiai virš jos esančius kriterijus atitinkančius langelius ir atsakymą įdės į „ActiveCell“. Funkcijos COUNTIF diapazonas turi būti nurodytas naudojant eilutės (R) ir stulpelio (C) sintaksę.
Abu šie metodai leidžia naudoti dinamines „Excel“ formules VBA.
Dabar vietoj reikšmės D10 bus formulė.
Jūsų nuorodos tekstas