Из этого туториала Вы узнаете, как использовать функции Excel СЧЁТЕСЛИ и СЧЁТЕСЛИ в VBA.
VBA не имеет эквивалента функций СЧЁТЕСЛИ или СЧЁТЕСЛИМН, которые вы можете использовать - пользователь должен использовать встроенные функции Excel в VBA, используя Рабочий лист объект.
СЧЕТЕСЛИ Рабочий лист
Объект WorksheetFunction можно использовать для вызова большинства функций Excel, доступных в диалоговом окне «Вставить функцию» в Excel. Функция СЧЁТЕСЛИ - одна из них.
123 | Sub TestCountIf ()Range ("D10") = Application.WorksheetFunction.CountIf (Range ("D2: D9"), "> 5")Конец подписки |
Приведенная выше процедура будет подсчитывать только ячейки в диапазоне (D2: D9), если они имеют значение 5 или больше. Обратите внимание: поскольку вы используете знак «больше», критерии больше 5 должны быть заключены в круглые скобки.
Присвоение переменной результата COUNTIF
Возможно, вы захотите использовать результат своей формулы в другом месте кода, а не записывать его непосредственно обратно в Excel Range. В этом случае вы можете присвоить результат переменной, которая будет использоваться позже в вашем коде.
1234567 | Sub AssignSumIfVariable ()Тусклый результат как двойной'Назначьте переменнуюresult = Application.WorksheetFunction.CountIf (Range ("D2: D9"), "> 5")'Показать результатMsgBox "Количество ячеек со значением больше 5 равно" & результатКонец подписки |
Использование СЧЁТЕСЛИМН
Функция СЧЁТЕСЛИМН похожа на функцию СЧЁТЕСЛИ Worksheet, но позволяет вам проверять более одного критерия. В приведенном ниже примере формула подсчитывает количество ячеек от D2 до D9, где цена продажи больше 6, а себестоимость больше 5.
123 | Sub UsingCountIfs ()Range ("D10") = WorksheetFunction.CountIfs (Range ("C2: C9"), "> 6", Range ("E2: E9"), "> 5")Конец подписки |
Использование COUNTIF с объектом диапазона
Вы можете назначить группу ячеек объекту Range, а затем использовать этот объект Range с Рабочий лист объект.
123456789 | Sub TestCountIFRange ()Dim rngCount as Range'назначить диапазон ячеекУстановите rngCount = Range ("D2: D9")'используйте диапазон в формулеДиапазон ("D10") = WorksheetFunction.SUMIF (rngCount, "> 5")'освободить объекты диапазонаУстановите rngCount = NothingКонец подписки |
Использование COUNTIFS для объектов с несколькими диапазонами
Точно так же вы можете использовать COUNTIFS для нескольких объектов диапазона.
123456789101112 | Sub TestCountMultipleRanges ()Dim rngCriteria1 As ДиапазонDim rngCriteria2 as Range'назначить диапазон ячеекУстановить rngCriteria1 = Range ("D2: D9")Установить rngCriteria2 = Range ("E2: E10")'используйте диапазоны в формулеДиапазон ("D10") = WorksheetFunction.CountIfs (rngCriteria1, "> 6", rngCriteria2, "> 5")'освободить объекты диапазонаУстановить rngCriteria1 = NothingУстановить rngCriteria2 = NothingКонец подписки |
СЧЁТЕСЛИ Формула
Когда вы используете WorksheetFunction.COUNTIF чтобы добавить сумму к диапазону на листе, возвращается статическое значение, а не гибкая формула. Это означает, что при изменении ваших цифр в Excel значение, возвращаемое Рабочий лист не изменится.
В приведенном выше примере процедура подсчитала количество ячеек со значениями в диапазоне (D2: D9), где цена продажи больше 6, и результат был помещен в D10. Как вы можете видеть в строке формул, это число, а не формула.
Если любое из значений изменится в диапазоне (D2: D9), результат в D10 будет НЕТ изменение.
Вместо использования Рабочий лист Функция. Сумма Если, вы можете использовать VBA для применения функции СУММЕСЛИ к ячейке с помощью Формула или Формула R1C1 методы.
Формула Метод
Метод формулы позволяет указать конкретный диапазон ячеек, например: D2: D9, как показано ниже.
123 | Sub TestCountIf ()Диапазон ("D10"). FormulaR1C1 = "= СЧЁТЕСЛИ (D2: D9," "> 5" ")"Конец подписки |
Метод FormulaR1C1
Метод FormulaR1C1 более гибкий, поскольку он не ограничивает вас заданным диапазоном ячеек. Пример ниже даст нам тот же ответ, что и приведенный выше.
123 | Sub TestCountIf ()Диапазон ("D10"). FormulaR1C1 = "= СЧЁТЕСЛИ (R [-8] C: R [-1] C," "> 5" ")"Конец подписки |
Однако, чтобы сделать формулу еще более гибкой, мы могли бы изменить код, чтобы он выглядел так:
123 | Sub TestCountIf ()ActiveCell.FormulaR1C1 = "= СЧЁТЕСЛИ (R [-8] C: R [-1] C," "> 5" ")"Конец подписки |
Где бы вы ни находились на своем листе, формула затем подсчитает ячейки, которые соответствуют критериям непосредственно над ней, и поместит ответ в вашу ActiveCell. На диапазон внутри функции СЧЁТЕСЛИ необходимо ссылаться с использованием синтаксиса строки (R) и столбца (C).
Оба эти метода позволяют использовать динамические формулы Excel в VBA.
Теперь вместо значения в D10 будет формула.
Текст вашей ссылки