Funcții VBA SUMIF și SUMIFS

Acest tutorial vă va arăta cum să utilizați funcțiile Excel SUMIF și SUMIFS în VBA

VBA nu are un echivalent al funcțiilor SUMIF sau SUMIFS pe care le puteți utiliza - un utilizator trebuie să utilizeze funcțiile Excel încorporate în VBA folosind WorkSheetFunction obiect.

SUMIF WorksheetFunction

Obiectul WorksheetFunction poate fi utilizat pentru a apela majoritatea funcțiilor Excel disponibile în caseta de dialog Insert Function din Excel. Funcția SUMIF este una dintre ele.

123 SubTestSumIf ()Range ("D10") = Application.WorksheetFunction.SumIf (Range ("C2: C9"), 150, Range ("D2: D9"))Sfârșitul Sub

Procedura de mai sus va adăuga celulele din Range (D2: D9) numai dacă celula corespunzătoare din coloana C = 150.

Atribuirea unui rezultat SUMIF 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 = WorksheetFunction.SumIf (Range ("C2: C9"), 150, Range ("D2: D9"))'Arată rezultatulMsgBox "Totalul rezultatului care corespunde celor 150 de coduri de vânzare este" & rezultatSfârșitul Sub

Folosind SUMIFS

Funcția SUMIFS este similară cu SUMIF WorksheetFunction, dar vă permite să verificați mai multe criterii. În exemplul de mai jos, căutăm să adăugăm prețul de vânzare dacă codul de vânzare este 150 ȘI Prețul de cost este mai mare de 2. Observați că, în această formulă, intervalul de celule de adăugat este în fața criteriilor, întrucât în funcția SUMIF, se află în spatele.

123 Sub MultipleSumIfs ()Range ("D10") = WorksheetFunction.SumIfs (Range ("D2: D9"), Range ("C2: C9"), 150, Range ("E2: E9"), "> 2")Sfârșitul Sub

Utilizarea SUMIF 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.

123456789101112 Sub TestSumIFRange ()Dim rngCriteria As RangeDim rngSum ca Range'atribuiți gama de celuleSetați rngCriteria = Range ("C2: C9")Setați rngSum = Range ("D2: D9")'utilizați intervalul din formulăRange ("D10") = WorksheetFunction.SumIf (rngCriteria, 150, rngSum)'eliberați obiectele de gamăSet rngCriteria = NimicSet rngSum = NimicSfârșitul Sub

Folosind SUMIFS pe obiecte cu mai multe domenii

În mod similar, puteți utiliza SUMIFS pe mai multe obiecte Range.

123456789101112131415 Sub TestSumMultipleRanges ()Dim rngCriteria1 ca intervalDim rngCriteria2 ca RangeDim rngSum ca Range'atribuiți gama de celuleSetați rngCriteria1 = Range ("C2: C9")Setați rngCriteria2 = Range ("E2: E10")Setați rngSum = Range ("D2: D10")'utilizați intervalele din formulăRange ("D10") = WorksheetFunction.SumIfs (rngSum, rngCriteria1, 150, rngCriteria2, "> 2")'eliberați obiectul de gamăSet rngCriteria1 = NimicSetați rngCriteria2 = NimicSet rngSum = NimicSfârșitul Sub

Observați că, deoarece utilizați un semn mai mare decât, criteriile mai mari de 2 trebuie să fie în paranteză.

Formula SUMIF

Când utilizați WorksheetFunction.SUMIF pentru a adăuga o sumă într-un interval din foaia de lucru, se returnează o sumă 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 adăugat Range (D2: D9) unde SaleCode este egal cu 150 în coloana C, iar rezultatul a fost introdus î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 modifică fie în Range (D2: D9), fie în Range (C2: 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: D10 așa cum se arată mai jos.

123 SubTestSumIf ()Interval ("D10"). FormulaR1C1 = "= SUMIF (C2: C9,150, D2: D9)"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 SubTestSumIf ()Interval ("D10"). FormulaR1C1 = "= SUMIF (R [-8] C [-1]: R [-1] C [-1], 150, R [-8] C: R [-1] C ) "Sfârșitul Sub

Cu toate acestea, pentru a face formula mai flexibilă, am putea modifica codul astfel:

123 SubTestSumIf ()ActiveCell.FormulaR1C1 = "= SUMIF (R [-8] C [-1]: R [-1] C [-1], 150, R [-8] C: R [-1] C)"Sfârșitul Sub

Oriunde vă aflați în foaia dvs. de lucru, formula va adăuga apoi celulele care îndeplinesc criteriile direct deasupra acesteia și vor plasa răspunsul în ActiveCell. Gama din interiorul funcției SUMIF 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.

wave wave wave wave wave