Funcții VBA COUNTIF și COUNTIFS

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.

wave wave wave wave wave