Функции VBA SUMIF и SUMIFS

Този урок ще ви покаже как да използвате функциите SUMIF и SUMIFS на Excel във VBA

VBA няма еквивалент на функциите SUMIF или SUMIFS, които можете да използвате - потребителят трябва да използва вградените функции на Excel във VBA, като използва WorkSheetFunction обект.

SUMIF Работен лист Функция

Обектът WorksheetFunction може да се използва за извикване на повечето от функциите на Excel, които са налични в диалоговия прозорец Вмъкване на функция в Excel. Функцията SUMIF е една от тях.

123 Sub TestSumIf ()Range ("D10") = Application.WorksheetFunction.SumIf (Range ("C2: C9"), 150, Range ("D2: D9"))End Sub

Горната процедура ще добави клетките в диапазон (D2: D9) само ако съответната клетка в колона C = 150.

Присвояване на резултат SUMIF на променлива

Може да искате да използвате резултата от формулата си другаде в кода, вместо да го пишете директно обратно в и Excel диапазон. Ако случаят е такъв, можете да присвоите резултата на променлива, която да използвате по -късно във вашия код.

1234567 Sub AssignSumIfVariable ()Затъмнете резултата като двоен'Задайте променливатаresult = WorksheetFunction.SumIf (Range ("C2: C9"), 150, Range ("D2: D9"))'Покажете резултатаMsgBox "Общият резултат, съответстващ на 150 кода за продажби, е" & резултатEnd Sub

Използване на SUMIFS

Функцията SUMIFS е подобна на функцията SUMIF WorksheetFunction, но ви позволява да проверите за повече от един критерий. В примера по -долу се стремим да съберем продажната цена, ако кодът за продажба е 150 И себестойността е по -голяма от 2. Обърнете внимание, че в тази формула диапазонът от клетки за добавяне е пред критериите, докато във функцията SUMIF, тя е отзад.

123 Sub MultipleSumIfs ()Диапазон ("D10") = Функция на работен лист.End Sub

Използване на SUMIF с Range Object

Можете да присвоите група клетки на обекта Range и след това да използвате този Range обект с Работен лист Функция обект.

123456789101112 Sub TestSumIFRange ()Dim rngCriteria As RangeDim rngSum като Range'задайте диапазона от клеткиЗадайте rngCriteria = Range ("C2: C9")Задайте rngSum = Диапазон ("D2: D9")'използвайте диапазона във формулатаДиапазон ("D10") = Работен лист Function.SumIf (rngCriteria, 150, rngSum)'освободете обектите на диапазонаЗадайте rngCriteria = НищоЗадайте rngSum = НищоEnd Sub

Използване на SUMIFS върху обекти с множество обхвати

По същия начин можете да използвате SUMIFS на множество Range обекти.

123456789101112131415 Sub TestSumMultipleRanges ()Dim rngCriteria1 As RangeDim rngCriteria2 като диапазонDim rngSum като Range'задайте диапазона от клеткиЗадайте rngCriteria1 = Обхват ("C2: C9")Задайте rngCriteria2 = Обхват ("E2: E10")Задайте rngSum = Диапазон ("D2: D10")'използвайте диапазоните във формулатаRange ("D10") = WorksheetFunction.SumIfs (rngSum, rngCriteria1, 150, rngCriteria2, "> 2")'освободете обекта rangeЗадайте rngCriteria1 = НищоЗадайте rngCriteria2 = НищоЗадайте rngSum = НищоEnd Sub

Забележете, че тъй като използвате знак по -голям от, критериите по -големи от 2 трябва да бъдат в скоби.

Формула SUMIF

Когато използвате Работен лист Функция.SUMIF за да добавите сума към диапазон във вашия работен лист, се връща статична сума, а не гъвкава формула. Това означава, че когато вашите цифри в Excel се променят, стойността, която е била върната от Работен лист Функция няма да се промени.

В горния пример процедурата е добавила Range (D2: D9), където SaleCode е равен на 150 в колона C, а резултатът е поставен в D10. Както можете да видите в лентата с формули, този резултат е цифра, а не формула.

Ако някоя от стойностите се промени в Обхват (D2: D9) или Обхват (C2: D9), резултатът в D10 ще НЕ промяна.

Вместо да използвате Работен листFunction.SumIf, можете да използвате VBA, за да приложите SUMIF функция към клетка, използвайки Формула или Формула R1C1 методи.

Метод на формулата

Методът на формулата ви позволява да посочите конкретно диапазон от клетки, например: D2: D10, както е показано по -долу.

123 Sub TestSumIf ()Обхват ("D10"). Формула R1C1 = "= SUMIF (C2: C9,150, D2: D9)"End Sub

Формула Метод R1C1

Методът FormulaR1C1 е по -гъвкав, тъй като не ви ограничава до определен диапазон от клетки. Примерът по -долу ще ни даде същия отговор като този по -горе.

123 Sub TestSumIf ()Обхват ("D10"). Формула R1C1 = "= SUMIF (R [-8] C [-1]: R [-1] C [-1], 150, R [-8] C: R [-1] C ) "End Sub

За да направим формулата по -гъвкава, бихме могли да променим кода така, че да изглежда така:

123 Sub TestSumIf ()ActiveCell.FormulaR1C1 = "= SUMIF (R [-8] C [-1]: R [-1] C [-1], 150, R [-8] C: R [-1] C)"End Sub

Където и да сте в работния си лист, формулата ще добави клетките, които отговарят на критериите точно над него, и ще постави отговора във вашия ActiveCell. Обхватът във функцията SUMIF трябва да бъде посочен чрез синтаксиса на ред (R) и колона (C).

И двата метода ви позволяват да използвате формули за динамичен Excel в рамките на VBA.

Сега ще има формула в D10 вместо стойност.

wave wave wave wave wave