Funkcje VBA SUMIF i SUMIFS

Ten samouczek pokaże Ci, jak korzystać z funkcji Excel SUMIF i SUMIFS w VBA

VBA nie ma odpowiednika funkcji SUMA.JEŻELI lub SUMA.Funkcjach, których można użyć - użytkownik musi korzystać z wbudowanych funkcji Excela w VBA za pomocą Funkcja arkusza roboczego obiekt.

SUMIF Arkusz roboczyFunkcja

Obiekt WorksheetFunction może służyć do wywoływania większości funkcji programu Excel dostępnych w oknie dialogowym Wstaw funkcję w programie Excel. Jednym z nich jest funkcja SUMA.JEŻELI.

123 Suma podrzędna, jeśli()Range("D10") = Application.WorksheetFunction.SumIf(Range("C2:C9"), 150, Range("D2:D9"))Napis końcowy

Powyższa procedura spowoduje dodanie komórek z zakresu (D2:D9) tylko wtedy, gdy odpowiadająca komórka w kolumnie C = 150.

Przypisywanie wyniku SUMA.JEŻELI do zmiennej

Możesz chcieć użyć wyniku formuły w innym miejscu w kodzie, zamiast zapisywać go bezpośrednio z powrotem do zakresu programu Excel. W takim przypadku możesz przypisać wynik do zmiennej, która będzie używana później w kodzie.

1234567 Sub AssignSumIf Variable()Przyciemnij wynik jako Double'Przypisz zmiennąwynik = WorksheetFunction.SumIf(Range("C2:C9"), 150, Range("D2:D9"))'Pokaż wynikMsgBox "Całkowity wynik pasujący do kodu sprzedaży 150 to " & wynikNapis końcowy

Korzystanie z SUMIFS

Funkcja SUMI.Funkcja jest podobna do funkcji arkusza roboczego SUMA.JEŻELI, ale umożliwia sprawdzenie więcej niż jednego kryterium. W poniższym przykładzie staramy się zsumować cenę sprzedaży, jeśli kod sprzedaży to 150 ORAZ cena kosztowa jest większa niż 2. Zauważ, że w tej formule zakres komórek do zsumowania znajduje się przed kryteriami, podczas gdy w funkcji SUMIF jest w tyle.

123 Sub MultipleSumIfs()Range("D10") = WorksheetFunction.SumIfs(Range("D2:D9"), Range("C2:C9"), 150, Range("E2:E9"), ">2")Napis końcowy

Używanie SUMA.JEŻELI z obiektem zakresu

Możesz przypisać grupę komórek do obiektu Range, a następnie użyć tego obiektu Range z Funkcja arkusza roboczego obiekt.

123456789101112 Podrzędna suma testowaIFRange()Dim rngCriteria As RangeDim rngSum jako zakres'przypisz zakres komórekUstaw rngCriteria = Zakres("C2:C9")Ustaw rngSum = Zakres("D2:D9")'użyj zakresu we wzorzeZakres("D10") = WorksheetFunction.SumIf(rngCriteria, 150, rngSum)'zwolnij obiekty zasięguUstaw rngCriteria = NicUstaw sumę rng = NicNapis końcowy

Używanie SUMIFS na obiektach o wielu zakresach

Podobnie możesz użyć SUMIFS na wielu obiektach zakresu.

123456789101112131415 SubTestSumMultipleRanges()Dim rngCriteria1 jako zakresDim rngCriteria2 jako zakresDim rngSum jako zakres'przypisz zakres komórekUstaw rngCriteria1= Zakres("C2:C9")Ustaw rngCriteria2 = Zakres("E2:E10")Ustaw rngSum = Zakres("D2:D10")'użyj zakresów we wzorzeZakres("D10") = WorksheetFunction.SumIfs(rngSum, rngCriteria1, 150, rngCriteria2, ">2")'zwolnij obiekt zakresuUstaw rngCriteria1 = NicUstaw rngCriteria2 = NicUstaw sumę rng = NicNapis końcowy

Zauważ, że ponieważ używasz znaku większego niż, kryteria większe niż 2 muszą być w nawiasach.

SUMA.JEŻELI Formuła

Kiedy używasz Arkusz Funkcja.SUMIF aby dodać sumę do zakresu w arkuszu, zwracana jest suma statyczna, a nie elastyczna formuła. Oznacza to, że gdy zmienią się Twoje dane w Excelu, wartość zwrócona przez Funkcja arkusza roboczego nie zmieni się.

W powyższym przykładzie procedura dodała Range(D2:D9), gdzie SaleCode jest równy 150 w kolumnie C, a wynik został umieszczony w D10. Jak widać na pasku formuły, ten wynik jest liczbą, a nie formułą.

Jeśli którakolwiek z wartości zmieni się w Range(D2:D9) lub Range(C2:D9), wynik w D10 będzie NIE reszta.

Zamiast używać Arkusz Funkcja.SumIf, możesz użyć VBA, aby zastosować funkcję SUMA.JEŻELI do komórki za pomocą Formuła lub FormułaR1C1 metody.

Metoda formuły

Metoda formuł pozwala wskazać konkretny zakres komórek, np.: D2:D10, jak pokazano poniżej.

123 Suma podrzędna, jeśli()Zakres("D10").FormułaR1C1 = "=SUMA.JEŻELI(C2:C9,150;D2:D9)"Napis końcowy

FormułaR1C1 Metoda

Metoda FormulaR1C1 jest bardziej elastyczna, ponieważ nie ogranicza użytkownika do określonego zakresu komórek. Poniższy przykład da nam taką samą odpowiedź jak powyższy.

123 Suma podrzędna, jeśli()Zakres("D10").WzórR1C1 = "=SUMA.JEŻELI(R[-8]C[-1]:R[-1]C[-1],150,R[-8]C:R[-1]C )"Napis końcowy

Aby jednak formuła była bardziej elastyczna, możemy zmienić kod tak, aby wyglądał tak:

123 Podtest SumaJeżeli()ActiveCell.FormulaR1C1 = "=SUMA.JEŻELI(R[-8]C[-1]:R[-1]C[-1];150;R[-8]C:R[-1]C)"Napis końcowy

Gdziekolwiek jesteś w arkuszu, formuła zsumuje komórki spełniające kryteria bezpośrednio nad nim i umieści odpowiedź w ActiveCell. Zakres wewnątrz funkcji SUMA.JEŻELI należy odwoływać się za pomocą składni Wiersz (R) i Kolumna (C).

Obie te metody umożliwiają korzystanie z formuł Dynamic Excel w VBA.

W D10 będzie teraz formuła zamiast wartości.

wave wave wave wave wave