Acest tutorial vă va arăta cum să utilizați funcțiile Excel COUNTIF și COUNTIFS în VBA
VBA nu are un echivalent al funcțiilor COUNTIF sau COUNTIFS pe care le puteți utiliza - un utilizator trebuie să utilizeze funcțiile Excel încorporate în VBA folosind WorkSheetFunction obiect.
COUNTIF WorksheetFunction
Obiectul WorksheetFunction poate fi utilizat pentru a apela majoritatea funcțiilor Excel disponibile în caseta de dialog Insert Function din Excel. Funcția COUNTIF este una dintre ele.
123 | Sub TestCountIf ()Range ("D10") = Application.WorksheetFunction.CountIf (Range ("D2: D9"), "> 5")Sfârșitul Sub |
Procedura de mai sus va număra celulele din Interval (D2: D9) numai dacă acestea au o valoare de 5 sau mai mare. Observați că, deoarece utilizați un semn mai mare decât, criteriile mai mari de 5 trebuie să fie în paranteză.
Atribuirea unui rezultat COUNTIF unei variabile
Poate doriți să utilizați rezultatul formulei dvs. în altă parte în cod, mai degrabă decât să o scrieți direct înapoi și în intervalul Excel. Dacă acesta este cazul, puteți atribui rezultatul unei variabile pentru a o utiliza ulterior în cod.
1234567 | Sub AssignSumIfVariable ()Reduceți rezultatul ca Dublu'Atribuiți variabilaresult = Application.WorksheetFunction.CountIf (Range ("D2: D9"), "> 5")'Arată rezultatulMsgBox "Numărul de celule cu o valoare mai mare de 5 este" & rezultatSfârșitul Sub |
Folosind COUNTIFS
Funcția COUNTIFS este similară cu funcția COUNTIF WorksheetFunction, dar vă permite să verificați mai multe criterii. În exemplul de mai jos, formula va număra numărul de celule din D2 până la D9 unde Prețul de vânzare este mai mare de 6 ȘI Prețul de cost este mai mare de 5.
123 | Sub UsingCountIfs ()Range ("D10") = WorksheetFunction.CountIfs (Range ("C2: C9"), "> 6", Range ("E2: E9"), "> 5")Sfârșitul Sub |
Utilizarea COUNTIF cu un obiect Range
Puteți atribui un grup de celule obiectului Range și apoi utilizați acel obiect Range cu Foaie de lucruFuncție obiect.
123456789 | Sub TestCountIFRange ()Dim rngCount ca Range'atribuiți gama de celuleSetați rngCount = Range ("D2: D9")'utilizați intervalul din formulăRange ("D10") = WorksheetFunction.SUMIF (rngCount, "> 5")'eliberați obiectele de gamăSet rngCount = NimicSfârșitul Sub |
Utilizarea COUNTIFS pe obiecte cu intervale multiple
În mod similar, puteți utiliza COUNTIFS pe mai multe obiecte Range.
123456789101112 | Sub TestCountMultipleRanges ()Dim rngCriteria1 ca intervalDim rngCriteria2 ca Range'atribuiți gama de celuleSetați rngCriteria1 = Range ("D2: D9")Setați rngCriteria2 = Range ("E2: E10")'utilizați intervalele din formulăRange ("D10") = WorksheetFunction.CountIfs (rngCriteria1, "> 6", rngCriteria2, "> 5")'eliberați obiectele de gamăSet rngCriteria1 = NimicSetați rngCriteria2 = NimicSfârșitul Sub |
Formula COUNTIF
Când utilizați WorksheetFunction.COUNTIF pentru a adăuga o sumă la un interval din foaia de lucru, se returnează o valoare statică, nu o formulă flexibilă. Aceasta înseamnă că atunci când cifrele dvs. din Excel se schimbă, valoarea care a fost returnată de Foaie de lucruFuncție nu se va schimba.
În exemplul de mai sus, procedura a numărat cantitatea de celule cu valori în domeniul (D2: D9) în care prețul de vânzare este mai mare de 6, iar rezultatul a fost plasat în D10. După cum puteți vedea în bara de formule, acest rezultat este o cifră și nu o formulă.
Dacă oricare dintre valori se schimbă în Gama (D2: D9), rezultatul în D10 va fi NU Schimbare.
În loc să utilizați WorksheetFunction.SumIf, puteți utiliza VBA pentru a aplica o funcție SUMIF unei celule folosind Formulă sau FormulaR1C1 metode.
Metoda Formula
Metoda formulă vă permite să indicați în mod specific către o gamă de celule, de exemplu: D2: D9 așa cum se arată mai jos.
123 | Sub TestCountIf ()Interval ("D10"). FormulaR1C1 = "= COUNTIF (D2: D9," "> 5" ")"Sfârșitul Sub |
Metoda FormulaR1C1
Metoda FormulaR1C1 este mai flexibilă în sensul că nu vă restrânge la un interval set de celule. Exemplul de mai jos ne va oferi același răspuns ca cel de mai sus.
123 | Sub TestCountIf ()Interval ("D10"). FormulaR1C1 = "= COUNTIF (R [-8] C: R [-1] C," "> 5" ")"Sfârșitul Sub |
Cu toate acestea, pentru a face formula și mai flexibilă, am putea modifica codul astfel:
123 | Sub TestCountIf ()ActiveCell.FormulaR1C1 = "= COUNTIF (R [-8] C: R [-1] C," "> 5" ")"Sfârșitul Sub |
Oriunde vă aflați în foaia dvs. de lucru, formula va număra apoi celulele care îndeplinesc criteriile direct deasupra acesteia și vor plasa răspunsul în ActiveCell. Gama din interiorul funcției COUNTIF trebuie menționată folosind sintaxa Rând (R) și Coloană (C).
Ambele metode vă permit să utilizați formule dinamice Excel în cadrul VBA.
Acum va exista o formulă în D10 în loc de o valoare.
Textul linkului dvs.