Excel макрос сумма если

Суммирование числовых значений ячеек в диапазоне с учетом одного условия в коде VBA Excel. Метод WorksheetFunction.SumIf – синтаксис, параметры, примеры.

WorksheetFunction.SumIf – это метод VBA Excel, который вычисляет сумму числовых значений в диапазоне ячеек с учетом одного условия (критерия).

WorksheetFunction.SumIf (Диапазон_условия, Условие, Диапазон_суммирования)

  • Диапазон_условия – обязательный параметр, представляющий из себя часть обрабатываемой таблицы, в ячейках которого ищется совпадение с условием (критерием) суммирования.
  • Условие – обязательный параметр, определяющий условие (критерий) суммирования.
  • Диапазон_суммирования – необязательный* параметр, представляющий из себя часть таблицы, в ячейках которого, соответствующих условию (критерию), суммируются значения.

* Если «Диапазон_суммирования» не указан, его роль выполняет «Диапазон_условия». Другими словами, если условие проверяется в тех же ячейках, значения которых суммируются при выполнении условия, то параметр «Диапазон_суммирования» можно не указывать.

В параметре «Условие» метода WorksheetFunction.SumIf можно использовать знаки подстановки:

  • вопросительный знак (?) – заменяет один любой символ;
  • звездочка (*) – заменяет любую последовательность символов (в том числе ни одного символа);
  • тильда (~) – ставится перед вопросительным знаком или звездочкой, чтобы они обозначали сами себя.

Примеры вычисления сумм с одним условием

Таблица, которая использовалась для реализации всех примеров в коде VBA Excel:

Склад Товар Кол-во Цена Сумма
№1 Апельсины 10 65,00 650,00
№1 Бананы 20 55,00 1100,00
№1 Лимоны 20 110,00 2200,00
№1 Мандарины 30 70,00 2100,00
№1 Яблоки 25 50,00 1250,00
№2 Апельсины 15 65,00 975,00
№2 Бананы 40 55,00 2200,00
№2 Лимоны 15 110,00 1650,00
№2 Мандарины 5 70,00 350,00
№2 Яблоки 10 50,00 500,00

Если хотите повторить примеры, скопируйте эту таблицу и вставьте на рабочий лист Excel в ячейку A1. Таблица займет диапазон A1:E11.

Пример 1
Использование параметра «Диапазон_условия» в качестве параметра «Диапазон_суммирования». Значения ячеек указанного диапазона сравниваются с условием и они же суммируются при выполнении условия:

Sub Primer1()

Dim a As Double

a = WorksheetFunction.SumIf(Range(«E2:E11»), «>2000»)

MsgBox a

End Sub

В этом примере складываются все значения в диапазоне E2:E11, которые превышают 2000. Обратите внимание, что условие заключено в прямые кавычки.

Другие варианты использования параметра «Условие»: «<1000», «<>2200», «=2200».

Пример 2
Определяем общую сумму товаров на складе №2:

Sub Primer2()

Dim a As Double

a = WorksheetFunction.SumIf(Range(«A2:A11»), _

«№2», Range(«E2:E11»))

MsgBox a

End Sub

Совпадение с условием ищется в диапазоне A2:A11. Значения ячеек диапазона E2:E11 суммируются в тех строках, где выполняется условие.

Пример 3
Применение знаков подстановки в параметре «Условие»:

Sub Primer3()

Dim a As Double

a = WorksheetFunction.SumIf(Range(«B2:B11»), _

«*ины», Range(«E2:E11»))

MsgBox a

a = WorksheetFunction.SumIf(Range(«B2:B11»), _

«??????ины», Range(«E2:E11»))

MsgBox a

End Sub

В этом примере мы двумя способами определяем общую сумму апельсинов и мандаринов на обоих складах. В первом случае используем звездочку (*), которая заменяет любую последовательность символов. Во втором случае используем знак вопроса (?), который обозначает один любой символ.

Смотрите также статьи о методах WorksheetFunction.Sum (суммирование без условия) и WorksheetFunction.SumIfs (суммирование с несколькими условиями).

Содержание

  1. Функции VBA СУММЕСЛИ и СУММЕСЛИМН
  2. Рабочий лист СУММЕСЛИ
  3. Присвоение результата СУММЕСЛИ переменной
  4. Использование СУММЕСЛИМН
  5. Использование СУММЕСЛИ с объектом диапазона
  6. Использование СУММЕСЛИМН для объектов с несколькими диапазонами
  7. Формула СУММЕСЛИ
  8. Формула Метод
  9. Метод FormulaR1C1
  10. VBA Excel. Метод WorksheetFunction.SumIf
  11. Синтаксис метода WorksheetFunction.SumIf
  12. Примеры вычисления сумм с одним условием
  13. Метод WorksheetFunction.SumIf (Excel)
  14. Синтаксис
  15. Параметры
  16. Возвращаемое значение
  17. Замечания
  18. Поддержка и обратная связь
  19. VBA SUMIF and SUMIFS Functions
  20. SUMIF WorksheetFunction
  21. Assigning a SUMIF result to a Variable
  22. Using SUMIFS
  23. Using SUMIF with a Range Object
  24. Using SUMIFS on Multiple Range Objects
  25. SUMIF Formula
  26. VBA Coding Made Easy
  27. Formula Method
  28. FormulaR1C1 Method
  29. VBA Code Examples Add-in

Функции VBA СУММЕСЛИ и СУММЕСЛИМН

Из этого туториала Вы узнаете, как использовать функции Excel СУММЕСЛИ и СУММЕСЛИМН в VBA.

VBA не имеет эквивалента функций СУММЕСЛИ или СУММЕСЛИМН, которые вы можете использовать — пользователь должен использовать встроенные функции Excel в VBA, используя Рабочий лист объект.

Рабочий лист СУММЕСЛИ

Объект WorksheetFunction можно использовать для вызова большинства функций Excel, доступных в диалоговом окне «Вставить функцию» в Excel. Функция СУММЕСЛИ — одна из них.

123 Sub TestSumIf ()Диапазон («D10») = Application.WorksheetFunction.SumIf (Range («C2: C9»), 150, Range («D2: D9»))Конец подписки

Приведенная выше процедура суммирует только ячейки в диапазоне (D2: D9), если соответствующая ячейка в столбце C = 150.

Присвоение результата СУММЕСЛИ переменной

Возможно, вы захотите использовать результат своей формулы в другом месте кода, а не записывать его непосредственно обратно в Excel Range. В этом случае вы можете присвоить результат переменной, которая будет использоваться позже в вашем коде.

1234567 Sub AssignSumIfVariable ()Тусклый результат как двойной’Назначьте переменнуюresult = WorksheetFunction.SumIf (Range («C2: C9»), 150, Range («D2: D9»))’Показать результатMsgBox «Суммарный результат, соответствующий коду продажи 150:» & resultКонец подписки

Использование СУММЕСЛИМН

Функция СУММЕСЛИМН аналогична функции рабочего листа СУММЕСЛИ, но позволяет проверять более одного критерия. В приведенном ниже примере мы пытаемся сложить продажную цену, если код продажи равен 150 И Себестоимость больше 2. Обратите внимание, что в этой формуле диапазон ячеек для суммирования находится перед критериями, тогда как в функции СУММЕСЛИ — позади.

123 Sub MultipleSumIfs ()Range («D10») = WorksheetFunction.SumIfs (Range («D2: D9»), Range («C2: C9»), 150, Range («E2: E9»), «> 2»)Конец подписки

Использование СУММЕСЛИ с объектом диапазона

Вы можете назначить группу ячеек объекту Range, а затем использовать этот объект Range с Рабочий лист объект.

123456789101112 Sub TestSumIFRange ()Dim rngCriteria As RangeDim rngSum as Range’назначить диапазон ячеекУстановить rngCriteria = Range («C2: C9»)Установить rngSum = Range («D2: D9»)’используйте диапазон в формулеДиапазон («D10») = WorksheetFunction.SumIf (rngCriteria, 150, rngSum)’освободить объекты диапазонаУстановить rngCriteria = NothingУстановить rngSum = NothingКонец подписки

Использование СУММЕСЛИМН для объектов с несколькими диапазонами

Точно так же вы можете использовать СУММЕСЛИМН для нескольких объектов диапазона.

123456789101112131415 Sub TestSumMultipleRanges ()Dim rngCriteria1 As ДиапазонDim rngCriteria2 as RangeDim rngSum as Range’назначить диапазон ячеекУстановить rngCriteria1 = Range («C2: C9»)Установить rngCriteria2 = Range («E2: E10»)Установить rngSum = Range («D2: D10»)’используйте диапазоны в формулеДиапазон («D10») = WorksheetFunction.SumIfs (rngSum, rngCriteria1, 150, rngCriteria2, «> 2»)’отпустить объект диапазонаУстановить rngCriteria1 = NothingУстановить rngCriteria2 = NothingУстановить rngSum = NothingКонец подписки

Обратите внимание: поскольку вы используете знак «больше», критерии больше 2 должны быть заключены в круглые скобки.

Формула СУММЕСЛИ

Когда вы используете Рабочий лист Функция СУММЕСЛИ чтобы добавить сумму к диапазону на листе, возвращается статическая сумма, а не гибкая формула. Это означает, что при изменении ваших цифр в Excel значение, возвращаемое Рабочий лист не изменится.

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

Если любое из значений изменится в диапазоне (D2: D9) или в диапазоне (C2: D9), результат в D10 будет НЕТ изменение.

Вместо использования Рабочий лист Функция. Сумма Если, вы можете использовать VBA для применения функции СУММЕСЛИ к ячейке с помощью Формула или Формула R1C1 методы.

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

Метод формулы позволяет указать конкретный диапазон ячеек, например: D2: D10, как показано ниже.

123 Sub TestSumIf ()Диапазон («D10»). FormulaR1C1 = «= СУММЕСЛИ (C2: C9,150, D2: D9)»Конец подписки

Метод FormulaR1C1

Метод FormulaR1C1 более гибкий, поскольку он не ограничивает вас заданным диапазоном ячеек. Пример ниже даст нам тот же ответ, что и приведенный выше.

123 Sub TestSumIf ()Диапазон («D10»). FormulaR1C1 = «= СУММЕСЛИ (R [-8] C [-1]: R [-1] C [-1], 150, R [-8] C: R [-1] C ) «Конец подписки

Однако, чтобы сделать формулу более гибкой, мы могли бы изменить код, чтобы он выглядел так:

123 Sub TestSumIf ()ActiveCell.FormulaR1C1 = «= СУММЕСЛИ (R [-8] C [-1]: R [-1] C [-1], 150, R [-8] C: R [-1] C)»Конец подписки

Где бы вы ни находились на своем листе, формула складывает ячейки, соответствующие критериям, прямо над ней и помещает ответ в вашу ActiveCell. На диапазон внутри функции СУММЕСЛИ необходимо ссылаться с использованием синтаксиса строки (R) и столбца (C).

Оба эти метода позволяют использовать динамические формулы Excel в VBA.

Теперь вместо значения в D10 будет формула.

Источник

VBA Excel. Метод WorksheetFunction.SumIf

Суммирование числовых значений ячеек в диапазоне с учетом одного условия в коде VBA Excel. Метод WorksheetFunction.SumIf – синтаксис, параметры, примеры.

Синтаксис метода WorksheetFunction.SumIf

  • Диапазон_условия – обязательный параметр, представляющий из себя часть обрабатываемой таблицы, в ячейках которого ищется совпадение с условием (критерием) суммирования.
  • Условие – обязательный параметр, определяющий условие (критерий) суммирования.
  • Диапазон_суммирования – необязательный* параметр, представляющий из себя часть таблицы, в ячейках которого, соответствующих условию (критерию), суммируются значения.

* Если «Диапазон_суммирования» не указан, его роль выполняет «Диапазон_условия». Другими словами, если условие проверяется в тех же ячейках, значения которых суммируются при выполнении условия, то параметр «Диапазон_суммирования» можно не указывать.

В параметре «Условие» метода WorksheetFunction.SumIf можно использовать знаки подстановки:

  • вопросительный знак (?) – заменяет один любой символ;
  • звездочка (*) – заменяет любую последовательность символов (в том числе ни одного символа);
  • тильда (

) – ставится перед вопросительным знаком или звездочкой, чтобы они обозначали сами себя.

Примеры вычисления сумм с одним условием

Таблица, которая использовалась для реализации всех примеров в коде VBA Excel:

Склад Товар Кол-во Цена Сумма
№1 Апельсины 10 65,00 650,00
№1 Бананы 20 55,00 1100,00
№1 Лимоны 20 110,00 2200,00
№1 Мандарины 30 70,00 2100,00
№1 Яблоки 25 50,00 1250,00
№2 Апельсины 15 65,00 975,00
№2 Бананы 40 55,00 2200,00
№2 Лимоны 15 110,00 1650,00
№2 Мандарины 5 70,00 350,00
№2 Яблоки 10 50,00 500,00

Если хотите повторить примеры, скопируйте эту таблицу и вставьте на рабочий лист Excel в ячейку A1. Таблица займет диапазон A1:E11.

Пример 1
Использование параметра «Диапазон_условия» в качестве параметра «Диапазон_суммирования». Значения ячеек указанного диапазона сравниваются с условием и они же суммируются при выполнении условия:

Источник

Метод WorksheetFunction.SumIf (Excel)

Добавляет ячейки, заданные заданными критериями.

Синтаксис

expression. SumIf (Arg1, Arg2, Arg3)

Выражение Переменная, представляющая объект WorksheetFunction .

Параметры

Имя Обязательный или необязательный Тип данных Описание
Arg1 Обязательный Range Range — диапазон ячеек, который требуется оценить по критериям.
Arg2 Обязательный Variant Условия — критерии в виде числа, выражения или текста, определяющие, какие ячейки будут добавлены. Например, критерии можно выразить как 32, «32», «>32» или «яблоки».
Arg3 Необязательный Variant Sum_range — фактические ячейки, добавляемые, если соответствующие ячейки в диапазоне соответствуют условиям. Если sum_range опущен, ячейки в диапазоне оцениваются по критериям и добавляются, если они соответствуют условиям.

Возвращаемое значение

Double

Замечания

Sum_range не обязательно должен иметь тот же размер и форму, что и диапазон. Фактические добавляемые ячейки определяются с помощью верхней, левой ячейки в sum_range в качестве начальной ячейки, а затем включает ячейки, соответствующие по размеру и форме диапазону. Например:

Если диапазон имеет значение И sum_range Фактические ячейки:
A1:A5 B1:B5 B1:B5
A1:A5 B1:B3 B1:B5
A1:B4 C1:D4 C1:D4
A1:B4 C1:C2 C1:D4

Используйте подстановочные знаки, вопросительный знак (?) и звездочку (*) в критериях. Вопросительный знак соответствует любому одному символу; звездочка соответствует любой последовательности символов. Если вы хотите найти фактический вопросительный знак или звездочку, введите тильду (

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

VBA SUMIF and SUMIFS Functions

In this Article

This tutorial will show you how to use the Excel SUMIF and SUMIFS Functions in VBA.

VBA does not have an equivalent of the SUMIF or SUMIFS Functions that you can use – a user has to use the built-in Excel functions in VBA using the WorksheetFunction object.

SUMIF WorksheetFunction

The WorksheetFunction object can be used to call most of the Excel functions that are available within the Insert Function dialog box in Excel. The SUMIF function is one of them.

The procedure above will only add up the cells in Range(D2:D9) if the corresponding cell in column C = 150.

Assigning a SUMIF result to a Variable

You may want to use the result of your formula elsewhere in code rather than writing it directly back to an Excel Range. If this is the case, you can assign the result to a variable to use later in your code.

Using SUMIFS

The SUMIFS function is similar to the SUMIF WorksheetFunction but it enables you to check for more than one criteria. In the example below, we are looking to add up the sale price if the sale code is 150 AND the Cost Price is greater than 2. Notice that in this formula, the range of cells to add up is in front of the criteria, whereas in the SUMIF function, it is behind.

Using SUMIF with a Range Object

You can assign a group of cells to the Range object, and then use that Range object with the WorksheetFunction object.

Using SUMIFS on Multiple Range Objects

Similarly, you can use SUMIFS on multiple Range Objects.

Notice that because you are using a greater than sign, the criteria greater than 2 needs to be within parenthesis.

SUMIF Formula

When you use the WorksheetFunction.SUMIF to add a sum to a range in your worksheet, a static sum is returned, not a flexible formula. This means that when your figures in Excel change, the value that has been returned by the WorksheetFunction will not change.

In the example above, the procedure has added up Range(D2:D9) where the SaleCode equals 150 in column C, and the result was put in D10. As you can see in the formula bar, this result is a figure and not a formula.

If any of the values change in either Range(D2:D9) or Range(C2:D9), the result in D10 will NOT change.

Instead of using the WorksheetFunction.SumIf, you can use VBA to apply a SUMIF Function to a cell using the Formula or FormulaR1C1 methods.

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!

Formula Method

The formula method allows you to point specifically to a range of cells eg: D2:D10 as shown below.

FormulaR1C1 Method

The FormulaR1C1 method is more flexible in that it does not restrict you to a set range of cells. The example below will give us the same answer as the one above.

However, to make the formula more flexible, we could amend the code to look like this:

Wherever you are in your worksheet, the formula will then add up the cells that meet the criteria directly above it and place the answer into your ActiveCell. The Range inside the SUMIF function has to be referred to using the Row (R) and Column (C) syntax.

Both these methods enable you to use Dynamic Excel formulas within VBA.

There will now be a formula in D10 instead of a value.

VBA Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

Источник

Содержание

  • Рабочий лист СУММЕСЛИ
  • Присвоение результата СУММЕСЛИ переменной
  • Использование СУММЕСЛИМН
  • Использование СУММЕСЛИ с объектом диапазона
  • Использование СУММЕСЛИМН для объектов с несколькими диапазонами
  • Формула СУММЕСЛИ

Из этого туториала Вы узнаете, как использовать функции Excel СУММЕСЛИ и СУММЕСЛИМН в VBA.

VBA не имеет эквивалента функций СУММЕСЛИ или СУММЕСЛИМН, которые вы можете использовать — пользователь должен использовать встроенные функции Excel в VBA, используя Рабочий лист объект.

Рабочий лист СУММЕСЛИ

Объект WorksheetFunction можно использовать для вызова большинства функций Excel, доступных в диалоговом окне «Вставить функцию» в Excel. Функция СУММЕСЛИ — одна из них.

123 Sub TestSumIf ()Диапазон («D10») = Application.WorksheetFunction.SumIf (Range («C2: C9»), 150, Range («D2: D9»))Конец подписки

Приведенная выше процедура суммирует только ячейки в диапазоне (D2: D9), если соответствующая ячейка в столбце C = 150.

Присвоение результата СУММЕСЛИ переменной

Возможно, вы захотите использовать результат своей формулы в другом месте кода, а не записывать его непосредственно обратно в Excel Range. В этом случае вы можете присвоить результат переменной, которая будет использоваться позже в вашем коде.

1234567 Sub AssignSumIfVariable ()Тусклый результат как двойной’Назначьте переменнуюresult = WorksheetFunction.SumIf (Range («C2: C9»), 150, Range («D2: D9»))’Показать результатMsgBox «Суммарный результат, соответствующий коду продажи 150:» & resultКонец подписки

Использование СУММЕСЛИМН

Функция СУММЕСЛИМН аналогична функции рабочего листа СУММЕСЛИ, но позволяет проверять более одного критерия. В приведенном ниже примере мы пытаемся сложить продажную цену, если код продажи равен 150 И Себестоимость больше 2. Обратите внимание, что в этой формуле диапазон ячеек для суммирования находится перед критериями, тогда как в функции СУММЕСЛИ — позади.

123 Sub MultipleSumIfs ()Range («D10») = WorksheetFunction.SumIfs (Range («D2: D9»), Range («C2: C9»), 150, Range («E2: E9»), «> 2»)Конец подписки

Использование СУММЕСЛИ с объектом диапазона

Вы можете назначить группу ячеек объекту Range, а затем использовать этот объект Range с Рабочий лист объект.

123456789101112 Sub TestSumIFRange ()Dim rngCriteria As RangeDim rngSum as Range’назначить диапазон ячеекУстановить rngCriteria = Range («C2: C9»)Установить rngSum = Range («D2: D9»)’используйте диапазон в формулеДиапазон («D10») = WorksheetFunction.SumIf (rngCriteria, 150, rngSum)’освободить объекты диапазонаУстановить rngCriteria = NothingУстановить rngSum = NothingКонец подписки

Использование СУММЕСЛИМН для объектов с несколькими диапазонами

Точно так же вы можете использовать СУММЕСЛИМН для нескольких объектов диапазона.

123456789101112131415 Sub TestSumMultipleRanges ()Dim rngCriteria1 As ДиапазонDim rngCriteria2 as RangeDim rngSum as Range’назначить диапазон ячеекУстановить rngCriteria1 = Range («C2: C9»)Установить rngCriteria2 = Range («E2: E10»)Установить rngSum = Range («D2: D10»)’используйте диапазоны в формулеДиапазон («D10») = WorksheetFunction.SumIfs (rngSum, rngCriteria1, 150, rngCriteria2, «> 2»)’отпустить объект диапазонаУстановить rngCriteria1 = NothingУстановить rngCriteria2 = NothingУстановить rngSum = NothingКонец подписки

Обратите внимание: поскольку вы используете знак «больше», критерии больше 2 должны быть заключены в круглые скобки.

Формула СУММЕСЛИ

Когда вы используете Рабочий лист Функция СУММЕСЛИ чтобы добавить сумму к диапазону на листе, возвращается статическая сумма, а не гибкая формула. Это означает, что при изменении ваших цифр в Excel значение, возвращаемое Рабочий лист не изменится.

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

Если любое из значений изменится в диапазоне (D2: D9) или в диапазоне (C2: D9), результат в D10 будет НЕТ изменение.

Вместо использования Рабочий лист Функция. Сумма Если, вы можете использовать VBA для применения функции СУММЕСЛИ к ячейке с помощью Формула или Формула R1C1 методы.

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

Метод формулы позволяет указать конкретный диапазон ячеек, например: D2: D10, как показано ниже.

123 Sub TestSumIf ()Диапазон («D10»). FormulaR1C1 = «= СУММЕСЛИ (C2: C9,150, D2: D9)»Конец подписки

Метод FormulaR1C1

Метод FormulaR1C1 более гибкий, поскольку он не ограничивает вас заданным диапазоном ячеек. Пример ниже даст нам тот же ответ, что и приведенный выше.

123 Sub TestSumIf ()Диапазон («D10»). FormulaR1C1 = «= СУММЕСЛИ (R [-8] C [-1]: R [-1] C [-1], 150, R [-8] C: R [-1] C ) «Конец подписки

Однако, чтобы сделать формулу более гибкой, мы могли бы изменить код, чтобы он выглядел так:

123 Sub TestSumIf ()ActiveCell.FormulaR1C1 = «= СУММЕСЛИ (R [-8] C [-1]: R [-1] C [-1], 150, R [-8] C: R [-1] C)»Конец подписки

Где бы вы ни находились на своем листе, формула складывает ячейки, соответствующие критериям, прямо над ней и помещает ответ в вашу ActiveCell. На диапазон внутри функции СУММЕСЛИ необходимо ссылаться с использованием синтаксиса строки (R) и столбца (C).

Оба эти метода позволяют использовать динамические формулы Excel в VBA.

Теперь вместо значения в D10 будет формула.

Вы поможете развитию сайта, поделившись страницей с друзьями

In this Article

  • SUMIF WorksheetFunction
  • Assigning a SUMIF result to a Variable
  • Using SUMIFS
  • Using SUMIF with a Range Object
  • Using SUMIFS on Multiple Range Objects
  • SUMIF Formula
    • Formula Method
    • FormulaR1C1 Method

This tutorial will show you how to use the Excel SUMIF and SUMIFS Functions in VBA.

VBA does not have an equivalent of the SUMIF or SUMIFS Functions that you can use – a user has to use the built-in Excel functions in VBA using the WorksheetFunction object.

SUMIF WorksheetFunction

The WorksheetFunction object can be used to call most of the Excel functions that are available within the Insert Function dialog box in Excel. The SUMIF function is one of them.

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

The procedure above will only add up the cells in Range(D2:D9) if the corresponding cell in column C = 150.

vba sumif code sample

Assigning a SUMIF result to a Variable

You may want to use the result of your formula elsewhere in code rather than writing it directly back to an Excel Range. If this is the case, you can assign the result to a variable to use later in your code.

Sub AssignSumIfVariable()
   Dim result as Double
'Assign the variable
   result = WorksheetFunction.SumIf(Range("C2:C9"), 150, Range("D2:D9"))
'Show the result
  MsgBox "The total of the result matching the 150 sales code is " &  result
End Sub

vba sum if result

Using SUMIFS

The SUMIFS function is similar to the SUMIF WorksheetFunction but it enables you to check for more than one criteria. In the example below, we are looking to add up the sale price if the sale code is 150 AND the Cost Price is greater than 2. Notice that in this formula, the range of cells to add up is in front of the criteria, whereas in the SUMIF function, it is behind.

Sub MultipleSumIfs()
   Range("D10") = WorksheetFunction.SumIfs(Range("D2:D9"), Range("C2:C9"), 150, Range("E2:E9"), ">2")
End Sub

vba sumif sumiffs

Using SUMIF with a Range Object

You can assign a group of cells to the Range object, and then use that Range object with the WorksheetFunction object.

Sub TestSumIFRange()
   Dim rngCriteria As Range
   Dim rngSum as Range
'assign the range of cells
   Set rngCriteria = Range("C2:C9")
   Set rngSum = Range("D2:D9")
'use the range in the  formula
   Range("D10") = WorksheetFunction.SumIf(rngCriteria, 150, rngSum)
'release the range objects
  Set rngCriteria = Nothing
  Set rngSum = Nothing
End Sub

Using SUMIFS on Multiple Range Objects

Similarly, you can use SUMIFS on multiple Range Objects.

Sub TestSumMultipleRanges() 
   Dim rngCriteria1 As Range 
   Dim rngCriteria2 as Range
   Dim rngSum as Range
'assign the range of cells 
   Set rngCriteria1= Range("C2:C9")
   Set rngCriteria2 = Range("E2:E9")   
   Set rngSum = Range("D2:D9")
'use the ranges in the formula 
Range("D10") = WorksheetFunction.SumIfs(rngSum, rngCriteria1, 150, rngCriteria2, ">2")
 'release the range object
  Set rngCriteria1 = Nothing 
  Set rngCriteria2 = Nothing
  Set rngSum = Nothing
End Sub

Notice that because you are using a greater than sign, the criteria greater than 2 needs to be within parenthesis.

SUMIF Formula

When you use the WorksheetFunction.SUMIF to add a sum to a range in your worksheet, a static sum is returned, not a flexible formula. This means that when your figures in Excel change, the value that has been returned by the WorksheetFunction will not change.

vba sumif static

In the example above, the procedure has added up Range(D2:D9) where the SaleCode equals 150 in column C, and the result was put in D10. As you can see in the formula bar, this result is a figure and not a formula.

If any of the values change in either Range(D2:D9) or Range(C2:D9), the result in D10 will NOT change.

Instead of using the WorksheetFunction.SumIf, you can use VBA to apply a SUMIF Function to a cell using the Formula or FormulaR1C1 methods.

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!

automacro

Learn More

Formula Method

The formula method allows you to point specifically to a range of cells eg: D2:D10 as shown below.

Sub TestSumIf()
  Range("D10").Formula = "=SUMIF(C2:C9,150,D2:D9)"
End Sub

vba sumif statis eg

FormulaR1C1 Method

The FormulaR1C1 method is more flexible in that it does not restrict you to a set range of cells. The example below will give us the same answer as the one above.

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

vba sumif variable

However, to make the formula more flexible, we could amend the code to look like this:

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

Wherever you are in your worksheet, the formula will then add up the cells that meet the criteria directly above it and place the answer into your ActiveCell. The Range inside the SUMIF function has to be referred to using the Row (R) and Column (C) syntax.

Both these methods enable you to use Dynamic Excel formulas within VBA.

There will now be a formula in D10 instead of a value.

1 / 1 / 0

Регистрация: 22.07.2018

Сообщений: 80

1

Excel

Макрос для функции суммесли

16.02.2019, 21:48. Показов 9865. Ответов 3


Студворк — интернет-сервис помощи студентам

Здравствуйте!!!
Кому не сложно и есть свободное время, помогите !!

Необходим макрос на функцию суммесли при условии что диапазон поиска находится в одной книге, на листе 2 (всего листов 3), критерий для поиска на другом (куда нужно вставить сумму), диапазон суммирования там же где диапазон поиска.

=СУММЕСЛИ(‘[диапазон_поиска.xlsx]0638′!$E:$E;C3;'[диапазон_поиска.xlsx]0638’!$G:$G)



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

16.02.2019, 21:48

Ответы с готовыми решениями:

Работа с аргументами-критериями, например, в функции СУММЕСЛИ
Есть ли какая-то функция позволяющая проверить число на соответствие критерию, представленному в…

Макрос для Exel функции если
Уважаемые форумчане срочно нужна Ваша помощь в написание макроса для функции если, значений для…

Макрос: Написать макрос по сравнению двух таблиц для нахождения несоответствий…
знатоки, прошу помощи в еще одном деле:
есть два листа,
—в одном список: яблоко, груша, слива, …

Определите макрос SQR с формальными параметрами для вычисления x2, макрос-константу SIZE для задания размера массива и протестируйте работу макроса
Определите макрос SQR с формальными параметрами для вычисления x2, макрос-константу SIZE для…

3

Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

16.02.2019, 21:59

2

Лучший ответ Сообщение было отмечено artofnewman как решение

Решение

artofnewman, так?

Visual Basic
1
range("F3").Formula = "=SUMIF('[диапазон_поиска.xlsx]0638'!$E:$E,C3,'[диапазон_поиска.xlsx]0638'!$G:$G)"



0



1 / 1 / 0

Регистрация: 22.07.2018

Сообщений: 80

16.02.2019, 22:31

 [ТС]

3

Вы просто супер!!!!!!!!!!!!
Можно еще попросить, а как протянуть вниз, чтоб он «суммировал» до тех пор пока находит данные.



0



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

17.02.2019, 00:51

4

Лучший ответ Сообщение было отмечено artofnewman как решение

Решение

artofnewman,

Visual Basic
1
range("F3:F" & cells(rows.Count ,"C").end(xlup).row).Formula = "=SUMIF('[диапазон_поиска.xlsx]0638'!$E:$E,C3,'[диапазон_поиска.xlsx]0638'!$G:$G)"



1



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

17.02.2019, 00:51

Помогаю со студенческими работами здесь

Сделать макрос в Word, вводишь строку и макрос произвольно меняет шрифт, цвет и размер для каждого слова из этого активного вордовского документа.
Началось VBA — лекций нет, только практика. Препод категоричеки отказывается что-нить объяснять,…

суммесли
в ячейке написал формулу
=СУММЕСЛИ(B:B;&quot;&gt;F8&quot;)
где В — столбец значений
а F8 — среднее…

СУММЕСЛИ
Помогите плиз рассчитать в табличке на странице отчет, формулы, с помощью СУММЕСЛИ, вместо СУММ……

СУММЕСЛИ
Нужно посчитать сумму вывезенной горной массы каждым автомобилем в зависимости от завода на который…

синтаксис СуммЕсли
нужно посчитать формулу в ячейке

Cells(2, 4) = &quot;=Sumif(&quot; &amp; rnTik.Address &amp; &quot;,&quot; &amp; arrQ(x) &amp; &quot;,&quot;…

Не считает СУММЕСЛИ
Доброго времени суток!
Подскажите, пожалуйста, почему у меня функция СУММЕСЛИ не хочет считать…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

4

Понравилась статья? Поделить с друзьями:
  • Excel макрос ссылка на ячейку
  • Excel макрос ссылка на файл
  • Excel макрос сравнения двух листов
  • Excel макрос список уникальных значений
  • Excel макрос список всех листов