Ši pamoka parodys, kaip naudoti „Excel SUMIF“ ir „SUMIFS“ funkcijas VBA
VBA neturi SUMIF ar SUMIFS funkcijų atitikmenų, kurias galite naudoti - vartotojas turi naudoti integruotas „Excel“ funkcijas VBA, naudodamas „WorkSheetFunction“ objektas.
SUMIF darbalapio funkcija
„WorksheetFunction“ objektu galima iškviesti daugumą „Excel“ funkcijų, kurios pasiekiamos „Excel“ dialogo lange Įterpti funkciją. SUMIF funkcija yra viena iš jų.
123 | Antrasis testasSumIf ()Diapazonas ("D10") = Application.WorksheetFunction.SumIf (Diapazonas ("C2: C9"), 150, Diapazonas ("D2: D9"))Pabaiga Sub |
Aukščiau aprašyta procedūra pridės diapazono (D2: D9) langelius tik tuo atveju, jei atitinkamas langelis C stulpelyje yra 150.
SUMIF 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 = darbo lapasFunkcija.SumIf (diapazonas („C2: C9“), 150, diapazonas („D2: D9“))'Parodyk rezultatą„MsgBox“ „Rezultatas, atitinkantis 150 pardavimo kodą, yra„ & result “Pabaiga Sub |
Naudojant SUMIFS
Funkcija SUMIFS yra panaši į SUMIF WorksheetFunction, tačiau ji leidžia patikrinti daugiau nei vieną kriterijų. Žemiau pateiktame pavyzdyje mes norime sudaryti pardavimo kainą, jei pardavimo kodas yra 150 IR savikaina yra didesnė nei 2. Atkreipkite dėmesį, kad šioje formulėje sudedamųjų langelių diapazonas yra prieš kriterijus, o SUMIF funkcijoje jis atsilieka.
123 | Sub MultipleSumIfs ()Diapazonas ("D10") = WorksheetFunction.SumIfs (diapazonas ("D2: D9"), diapazonas ("C2: C9"), 150, diapazonas ("E2: E9"), "> 2")Pabaiga Sub |
SUMIF naudojimas su diapazono objektu
Galite priskirti langelių grupę objektui „Range“, o tada naudoti tą diapazono objektą su Darbo lapas Funkcija objektas.
123456789101112 | SubtestasSUMIFRange ()Dim rngCriteria As RangeDim rngSum kaip diapazonas“priskirti ląstelių diapazonąNustatykite rngCriteria = Diapazonas („C2: C9“)Nustatyti rngSum = Diapazonas ("D2: D9")'naudokite diapazoną formulėjeDiapazonas ("D10") = WorksheetFunction.SumIf (rngCriteria, 150, rngSum)“paleiskite diapazono objektusNustatykite rngCriteria = NiekoNustatyti rngSum = NiekoPabaiga Sub |
SUMIFS naudojimas kelių diapazonų objektuose
Panašiai galite naudoti SUMIFS keliuose diapazono objektuose.
123456789101112131415 | Sub TestSumMultipleRanges ()Dim rngCriteria1 As RangeDim rngCriteria2 kaip diapazonasDim rngSum kaip diapazonas“priskirti ląstelių diapazonąNustatykite rngCriteria1 = Diapazonas („C2: C9“)Nustatykite rngCriteria2 = Diapazonas ("E2: E10")Nustatyti rngSum = Diapazonas („D2: D10“)'naudokite formulės diapazonusDiapazonas ("D10") = WorksheetFunction.SumIfs (rngSum, rngCriteria1, 150, rngCriteria2, "> 2")“paleiskite diapazono objektąNustatyti rngCriteria1 = NiekoNustatykite rngCriteria2 = NiekoNustatyti rngSum = NiekoPabaiga Sub |
Atkreipkite dėmesį, kad kadangi naudojate didesnį nei ženklą, kriterijai, didesni nei 2, turi būti skliausteliuose.
SUMIF formulė
Kai naudojate Darbo lapasFunkcija.SUMIF Norėdami pridėti sumą prie savo darbalapio diapazono, grąžinama statinė suma, o ne lanksti formulė. Tai reiškia, kad pasikeitus „Excel“ skaičiams, vertė, kurią grąžino Darbo lapas Funkcija nepasikeis.
Pirmiau pateiktame pavyzdyje procedūra pridėjo diapazoną (D2: D9), kur „SaleCode“ yra lygus 150 C stulpelyje, o rezultatas įrašytas į 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) arba diapazone (C2: D9), rezultatas D10 bus 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: D10, kaip parodyta žemiau.
123 | Antrasis testasSumIf ()Diapazonas ("D10"). FormulėR1C1 = "= SUMIF (C2: C9,150, D2: D9)"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 | Antrasis testasSumIf ()Diapazonas ("D10"). FormulėR1C1 = "= SUMIF (R [-8] C [-1]: R [-1] C [-1], 150, R [-8] C: R [-1] C ) "Pabaiga Sub |
Tačiau, kad formulė būtų lankstesnė, kodą galėtume pakeisti taip:
123 | Antrasis testasSumIf ()ActiveCell.FormulaR1C1 = "= SUMIF (R [-8] C [-1]: R [-1] C [-1], 150, R [-8] C: R [-1] C)"Pabaiga Sub |
Kad ir kur esate savo darbalapyje, formulė sudeda tiesiogiai virš jos esančius kriterijus atitinkančius langelius ir atsakymą įdeda į „ActiveCell“. Funkcijos SUMIF viduje esantis 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ė.