Из этого туториала Вы узнаете, как использовать функцию Excel COUNT в VBA.
Функция VBA COUNT используется для подсчета количества ячеек на вашем листе, в которых есть значения. Доступ к нему осуществляется с помощью метода WorksheetFunction в VBA.
COUNT рабочий лист
Объект WorksheetFunction можно использовать для вызова большинства функций Excel, доступных в диалоговом окне «Вставить функцию» в Excel. Функция СЧЁТ - одна из них.
123 | Sub TestCountFunctinoДиапазон ("D33") = Application.WorksheetFunction.Count (Диапазон ("D1: D32"))Конец подписки |
У вас может быть до 30 аргументов в функции COUNT. Каждый из аргументов должен относиться к диапазону ячеек.
В этом примере ниже будет подсчитано, сколько ячеек заполнено значениями в ячейках с D1 по D9.
123 | Sub TestCount ()Диапазон ("D10") = Application.WorksheetFunction.Count (Диапазон ("D1: D9"))Конец подписки |
В приведенном ниже примере будет подсчитано, сколько значений находится в диапазоне в столбце D и в диапазоне в столбце F. Если вы не введете объект Application, он будет принят.
123 | Sub TestCountMultiple ()Диапазон ("G8") = WorksheetFunction.Count (Диапазон ("G2: G7"), Диапазон ("H2: H7"))Конец подписки |
Присвоение результата подсчета переменной
Возможно, вы захотите использовать результат своей формулы в другом месте кода, а не записывать его непосредственно обратно в Excel Range. В этом случае вы можете присвоить результат переменной, которая будет использоваться позже в вашем коде.
1234567 | Sub AssignCount ()Уменьшить результат как целое число'Назначьте переменнуюрезультат = WorksheetFunction.Count (Range ("H2: H11"))'Показать результатMsgBox «Число ячеек, заполненных значениями» & resultКонец подписки |
COUNT с объектом диапазона
Вы можете назначить группу ячеек объекту Range, а затем использовать этот объект Range с Рабочий лист объект.
123456789 | Sub TestCountRange ()Dim rng As Range'назначить диапазон ячеекУстановить rng = Диапазон ("G2: G7")'используйте диапазон в формулеДиапазон ("G8") = WorksheetFunction.Count (rng)'отпустить объект диапазонаУстановить rng = ничегоКонец подписки |
COUNT несколько объектов диапазона
Точно так же вы можете подсчитать, сколько ячеек заполнено значениями в нескольких объектах диапазона.
123456789101112 | Sub TestCountMultipleRanges ()Dim rngA As ДиапазонDim rngB as Range'назначить диапазон ячеекУстановите rngA = Range ("D2: D10")Установите rngB = Range ("E2: E10")'используйте диапазон в формулеДиапазон ("E11") = WorksheetFunction.Count (rngA, rngB)'отпустить объект диапазонаУстановите rngA = NothingУстановить rngB = НичегоКонец подписки |
Использование COUNTA
При подсчете будут учитываться только ЗНАЧЕНИЯ в ячейках, он не будет учитывать ячейку, если в ячейке есть текст. Для подсчета ячеек, заполненных любыми данными, нам понадобится функция COUNTA.
123 | Sub TestCountA ()Диапазон ("B8) = Application.WorksheetFunction.CountA (Диапазон (" B1: B6 "))Конец подписки |
В приведенном ниже примере функция COUNT вернет ноль, поскольку в столбце B нет значений, тогда как функция COUNTA вернет 4 для столбца C. Однако функция COUNTA подсчитает ячейки с текстом в них и вернет значение 5 в столбце B, но по-прежнему возвращает значение 4 в столбце C.
Использование COUNTBLANKS
Функция COUNTBLANKS будет подсчитывать только пустые ячейки в диапазоне ячеек, то есть ячейки, в которых вообще нет данных.
123 | Sub TestCountBlank ()Диапазон ("B8) = Application.WorksheetFunction.CountBlanks (Диапазон (" B1: B6 "))Конец подписки |
В приведенном ниже примере в столбце B нет пустых ячеек, а в столбце C - одна пустая ячейка.
Использование функции СЧЁТЕСЛИ
Еще одна функция рабочего листа, которую можно использовать, - это функция СЧЁТЕСЛИ.
123456 | Sub TestCountIf ()Range ("H14") = WorksheetFunction.CountIf (Range ("H2: H10"), "> 0")Range ("H15") = WorksheetFunction.CountIf (Range ("H2: H10"), "> 100")Range ("H16") = WorksheetFunction.CountIf (Range ("H2: H10"), "> 1000")Range ("H17") = WorksheetFunction.CountIf (Range ("H2: H10"), "> 10000")Конец подписки |
Приведенная выше процедура будет подсчитывать ячейки со значениями в них, только если критерии совпадают - больше 0, больше 100, больше 1000 и больше 10000. Вы должны заключить критерии в кавычки, чтобы формула работала правильно.
Недостатки WorksheetFunction
Когда вы используете Рабочий лист для подсчета значений в диапазоне на вашем листе возвращается статическое значение, а не гибкая формула. Это означает, что при изменении ваших цифр в Excel значение, возвращаемое Рабочий лист не изменится.
В приведенном выше примере процедура TestCount подсчитала ячейки в столбце H, где присутствует значение. Как вы можете видеть в строке формул, это число, а не формула.
Если любое из значений изменится в диапазоне (H2: H12), результаты в H14 будут НЕТ изменение.
Вместо использования WorksheetFunction.Count, вы можете использовать VBA для применения функции подсчета к ячейке с помощью Формула или Формула R1C1 методы.
Использование метода формул
Метод формулы позволяет указать конкретный диапазон ячеек, например: H2: H12, как показано ниже.
123 | Sub TestCountFormulaДиапазон ("H14"). Формула = "= Count (H2: H12)"Конец подписки |
Использование метода FormulaR1C1
Метод FromulaR1C1 более гибкий, поскольку он не ограничивает вас заданным диапазоном ячеек. Пример ниже даст нам тот же ответ, что и приведенный выше.
123 | Sub TestCountFormula ()Диапазон ("H14"). Формула = "= Счетчик (R [-9] C: R [-1] C)"Конец подписки |
Однако, чтобы сделать формулу более гибкой, мы могли бы изменить код, чтобы он выглядел так:
123 | Sub TestCountFormula ()ActiveCell.FormulaR1C1 = "= Счетчик (R [-11] C: R [-1] C)"Конец подписки |
Где бы вы ни находились на своем листе, формула затем подсчитает значения в 12 ячейках непосредственно над ней и поместит ответ в вашу ActiveCell. На диапазон внутри функции COUNT следует ссылаться с использованием синтаксиса Row (R) и Column (C).
Оба эти метода позволяют использовать динамические формулы Excel в VBA.
Теперь вместо значения в H14 будет формула.