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

Подсчёт заполненных ячеек в Microsoft Excel — одна из самых востребованных операций при работе с данными. Без этого навыка невозможно анализировать отчёты, контролировать заполнение анкет или проверять целостность баз данных. Казалось бы, что может быть проще: выбрал диапазон и получил количество? Но на практике пользователи сталкиваются с нюансами: игнорирование формул, учёт скрытых строк, различие между "пустыми" и "нулевыми" значениями.

Эта статья покрывает все возможные сценарии — от базовых функций до автоматизации через VBA. Мы разберём не только стандартные методы вроде СЧЁТЗ, но и малоизвестные трюки с Power Query, условным форматированием и даже макросами для обработки миллионов строк. Особое внимание уделим типичным ошибкам, из-за которых Excel "не видит" заполненные ячейки, и покажем, как их обойти.

Если вы работаете с большими массивами данных, где критична скорость вычислений, или вам нужно учитывать ячейки с формулами, которые возвращают пустую строку — здесь вы найдёте готовые решения. А для тех, кто предпочитает визуальные методы, мы подготовили инструкции по использованию фильтров и сводных таблиц без единой формулы.

Важно: все примеры в статье протестированы в Excel 2019 и Microsoft 365, но majority методов работают и в более ранних версиях (начиная с Excel 2007). Для пользователей Google Sheets мы отдельно отметили совместимые функции.

1. Базовый метод: функция СЧЁТЗ

Функция СЧЁТЗ (или COUNTA в английской версии) — самый простой способ посчитать непустые ячейки в диапазоне. Она учитывает любые данные: текст, числа, даты, логические значения (ИСТИНА/ЛОЖЬ), а также ячейки с формулами, которые возвращают результат (даже если это пустая строка "").

Синтаксис функции:

=СЧЁТЗ(значение1; [значение2]; ...)

Где значение1 — обязательный аргумент (диапазон или отдельная ячейка), а последующие аргументы не обязательны.

Примеры использования:

  • 📌 Подсчёт заполненных ячеек в столбце A (с 1 по 100 строку): =СЧЁТЗ(A1:A100)
  • 📌 Подсчёт в несмежных диапазонах: =СЧЁТЗ(A1:A10; C1:C10; E1:E10)
  • 📌 Учёт нескольких листов: =СЧЁТЗ(Лист1!A1:A100; Лист2!A1:A100)

⚠️ Внимание: СЧЁТЗ игнорирует только истинно пустые ячейки. Если ячейка содержит формулу вида =ЕСЛИ(условие; ""; значение), которая возвращает пустую строку, функция посчитает её как заполненную. Чтобы исключить такие случаи, используйте комбинацию с СЧЁТЕСЛИ (разберём далее).

Для проверки работы функции создайте тестовый набор данных:

ЯчейкаСодержимоеСЧЁТЗ учитывает?
A1ТекстДа
A242Да
A3=СЕГОДНЯ()Да
A4=ЕСЛИ(1=1; ""; "Да")Да
A5(пусто)Нет
📊 Какой версией Excel вы пользуетесь?
Excel 2019 или новее
Excel 2016
Excel 2013
Excel 2010 или старше
Google Sheets

2. Условный подсчёт: СЧЁТЕСЛИ и СЧЁТЕСЛИМН

Когда нужно посчитать ячейки, соответствующие определённому критерию (например, только текстовые значения или числа больше 100), на помощь приходят функции СЧЁТЕСЛИ (COUNTIF) и СЧЁТЕСЛИМН (COUNTIFS).

СЧЁТЕСЛИ работает с одним диапазоном и одним условием:

=СЧЁТЕСЛИ(диапазон; критерий)

Примеры критериев:

  • 🔢 Числа: ">100", "<5", "=0"
  • 📝 Текст: "Да", "<>Нет" (не равно "Нет")
  • 📅 Даты: ">=1.01.2023", "<>"&SEGOДНЯ()
  • 🔍 Подстановочные знаки: "привет*" (начинается с "привет"), "текст" (содержит "текст")

СЧЁТЕСЛИМН расширяет возможности, позволяя задавать несколько диапазонов и условий:

=СЧЁТЕСЛИМН(диапазон1; условие1; [диапазон2; условие2]; ...)
Важно: все диапазоны должны быть одинакового размера!

Практический пример: подсчёт ячеек в столбце B, которые содержат текст "Да" и соответствующие строки в столбце A имеют значение больше 1000:

=СЧЁТЕСЛИМН(A1:A100; ">1000"; B1:B100; "Да")

⚠️ Внимание: Если критерий — текст или символ (например, "*"), его нужно заключать в кавычки. Для динамических критериев (ссылки на ячейки) кавычки не нужны: =СЧЁТЕСЛИ(A1:A10; D1), где в D1 записано условие.

3. Подсчёт видимых ячеек (с учётом фильтров)

При работе с отфильтрованными данными стандартные функции (СЧЁТЗ, СЧЁТЕСЛИ) учитывают все ячейки диапазона, включая скрытые строки. Чтобы посчитать только видимые (отфильтрованные) ячейки, используйте функцию ПРОМЕЖУТОЧНЫЕ.ИТОГИ (SUBTOTAL):

=ПРОМЕЖУТОЧНЫЕ.ИТОГИ(103; диапазон)

Где:

  • 103 — код операции для подсчёта непустых ячеек (аналог СЧЁТЗ)
  • диапазон — адрес ячеек, например A1:A100

Другие полезные коды операции для ПРОМЕЖУТОЧНЫЕ.ИТОГИ:

КодДействиеАналог функции
1СреднееСРЗНАЧ
2Количество чиселСЧЁТ
3Количество непустых ячеекСЧЁТЗ
9СуммаСУММ

Пример: подсчёт видимых ячеек в отфильтрованном столбце B:

=ПРОМЕЖУТОЧНЫЕ.ИТОГИ(103; B:B)

⚠️ Внимание: Функция ПРОМЕЖУТОЧНЫЕ.ИТОГИ игнорирует строки, скрытые вручную (через контекстное меню "Скрыть"), но учитывает строки, скрытые фильтром. Чтобы исключить и те, и другие, используйте комбинацию с VBA (разберём в разделе 6).

4. Визуальные методы: фильтры и сводные таблицы

Если формулы кажутся сложными, можно обойтись без них — с помощью встроенных инструментов Excel.

Метод 1: Фильтр по пустым/непустым ячейкам

  1. Выделите диапазон с данными (включая заголовки).
  2. Нажмите Данные → Фильтр (или Ctrl+Shift+L).
  3. Раскройте выпадающий список в заголовке столбца.
  4. Снимите галочку с (Пусто) и оставьте только (Непустые).
  5. Количество видимых строк в области данных — и есть количество заполненных ячеек.

Метод 2: Сводная таблица

  • 📊 Выделите исходные данные (включая заголовки).
  • Нажмите Вставка → Сводная таблица.
  • В области "Строки" перетащите поле, по которому нужно посчитать заполненные ячейки.
  • В область "Значения" перетащите то же поле — Excel автоматически посчитает количество непустых записей.

⚠️ Внимание: Визуальные методы не подходят для динамических данных, где количество заполненных ячеек меняется часто. В таких случаях лучше использовать формулы или Power Query.

Удалить пустые строки в исходном диапазоне|Проверить формат данных (числа как числа, даты как даты)|Добавить заголовки столбцов|Убедиться, что нет объединённых ячеек-->

5. Продвинутые методы: Power Query и массивы

Для обработки больших объёмов данных (десятки тысяч строк) или сложных условий подсчёта рекомендуем использовать Power Query — инструмент ETL (извлечение, преобразование, загрузка), встроенный в Excel 2016 и новее.

Алгоритм подсчёта непустых ячеек через Power Query:

  1. Выделите исходный диапазон и нажмите Данные → Из таблицы/диапазона (или Данные → Получить данные → Из таблицы/диапазона в Excel 2016).
  2. В открывшемся редакторе Power Query выделите столбец, в котором нужно посчитать заполненные ячейки.
  3. Нажмите Преобразовать → Заменить значения и замените пустые ячейки на уникальный маркер (например, #PUSTO#).
  4. Добавьте новый столбец с формулой: = if [Column1] <> "#PUSTO#" then 1 else 0 (замените Column1 на имя вашего столбца).
  5. Удалите исходный столбец, оставив только столбец с единицами/нулями.
  6. Нажмите Главная → Закрыть и загрузить в... и выберите "Только создать связь".
  7. Вернитесь на лист и создайте сводную таблицу на основе загруженных данных, где просуммируйте столбец с единицами.

Power Query обрабатывает данные в фоне и не тормозит Excel даже при работе с миллионами строк. Этот метод особенно полезен, если исходные данные обновляются регулярно — достаточно обновить запрос (Данные → Обновить все), и подсчёт пересчитается автоматически.

Для пользователей, предпочитающих формулы массивов (доступны в Excel 365), подойдёт такой вариант:

=СУММ(--(A1:A100<>""))

Эта формула возвращает количество непустых ячеек в диапазоне A1:A100. Двойной дефис (--) преобразует логические значения (ИСТИНА/ЛОЖЬ) в 1/0.

6. Автоматизация: макросы VBA для сложных задач

Если вам нужно посчитать заполненные ячейки с учётом скрытых строк (включая скрытые вручную), цветов ячеек или других нетривиальных условий, на помощь придёт VBA. Ниже приведён макрос, который подсчитывает непустые ячейки в выделенном диапазоне, игнорируя все скрытые строки (включая скрытые фильтром и вручную):

Function CountVisibleNonEmpty(rng As Range) As Long

Dim cell As Range

Dim count As Long

count = 0

For Each cell In rng

If Not IsEmpty(cell) And cell.EntireRow.Hidden = False Then

count = count + 1

End If

Next cell

CountVisibleNonEmpty = count

End Function

Как использовать макрос:

  1. Нажмите Alt+F11, чтобы открыть редактор VBA.
  2. Вставьте код в модуль (меню Insert → Module).
  3. Вернитесь на лист и введите формулу: =CountVisibleNonEmpty(A1:A100).

Для подсчёта ячеек с определённым цветом фона используйте этот макрос:

Function CountByColor(rng As Range, color As Range) As Long

Dim cell As Range

Dim count As Long

Dim targetColor As Long

targetColor = color.Interior.Color

count = 0

For Each cell In rng

If cell.Interior.Color = targetColor And Not IsEmpty(cell) Then

count = count + 1

End If

Next cell

CountByColor = count

End Function

Пример вызова: =CountByColor(A1:A100; B1), где в B1 установлен нужный цвет фона.

⚠️ Внимание: Макросы работают только в файлах с расширением .xlsm (с поддержкой макросов). При первом запуске может потребоваться разрешить выполнение макросов в настройках безопасности Excel (Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Параметры макросов).

Как ускорить работу макроса для больших диапазонов?

Отключите автоматический пересчёт формул и обновление экрана перед запуском макроса, добавив в начало кода строки:

Application.ScreenUpdating = False

Application.Calculation = xlCalculationManual

А в конец кода — строки возврата исходных настроек:

Application.ScreenUpdating = True

Application.Calculation = xlCalculationAutomatic

Это ускорит выполнение макроса в 5–10 раз для диапазонов свыше 100 000 строк.

7. Типичные ошибки и как их избежать

Даже опытные пользователи Excel сталкиваются с ошибками при подсчёте заполненных ячеек. Вот самые распространённые ловушки и способы их обхода:

Ошибка 1: Формулы, возвращающие пустую строку

  • 🔹 Проблема: Функция =ЕСЛИ(A1=0; ""; A1) визуально выглядит как пустая ячейка, но СЧЁТЗ её учитывает.
  • 🔹 Решение: Используйте =СЧЁТЕСЛИ(диапазон; "<>") или комбинацию =СУММ(--(ДЛСТР(диапазон)>0)) (для Excel 365).

Ошибка 2: Скрытые символы (пробелы, неразрывные пробелы)

  • 🔹 Проблема: Ячейка выглядит пустой, но содержит пробел или непечатаемый символ (например, после импорта данных).
  • 🔹 Решение: Очистите данные функцией СЖПРОБЕЛЫ или найдите проблемные ячейки с помощью =ДЛСТР(СЖПРОБЕЛЫ(A1))>0.

Ошибка 3: Ошибки в ячейках (#Н/Д, #ЗНАЧ!)

  • 🔹 Проблема: Функции СЧЁТЗ и СЧЁТЕСЛИ игнорируют ячейки с ошибками.
  • 🔹 Решение: Используйте =СЧЁТЕСЛИ(диапазон; "<>#Н/Д") или комбинацию с ЕОШИБКА:
  • =СУММ(--(НЕ(ЕОШИБКА(диапазон))))

Ошибка 4: Диапазон с объединёнными ячейками

  • 🔹 Проблема: Функции могут возвращать некорректные результаты для объединённых ячеек.
  • 🔹 Решение: Разъедините ячейки (Главная → Объединить и центрировать → Отменить объединение ячеек) или используйте VBA.

FAQ: Ответы на частые вопросы

Как посчитать заполненные ячейки в Google Sheets?

В Google Sheets работают те же функции, что и в Excel:

  • =COUNTA(A1:A100) — аналог СЧЁТЗ.
  • =COUNTIF(A1:A100; "<>") — подсчёт непустых ячеек.
  • =SUBTOTAL(103; A1:A100) — подсчёт видимых ячеек.

Отличие: в Google Sheets нет Power Query, но есть собственный Query Language для сложных запросов.

Почему СЧЁТЗ считает пустые ячейки?

Скорее всего, в "пустых" ячейках содержатся:

  • Формулы, возвращающие пустую строку (="").
  • Неразрывные пробелы или другие непечатаемые символы.
  • Ошибки, отображаемые как пустые ячейки (например, #Н/Д с белым шрифтом).

Проверьте данные с помощью =ЕПУСТО(A1) (вернёт ИСТИНА только для истинно пустых ячеек).

Как посчитать заполненные ячейки в диапазоне с формулами, которые ещё не рассчитаны?

Если в ячейках есть формулы, которые ещё не обновлялись (отображается старое значение), используйте:

  1. Принудительный пересчёт: F9 (для текущего листа) или Ctrl+Alt+F9 (для всей книги).
  2. Функцию =СЧЁТЕСЛИ(диапазон; "<>#ЗАНЯТО!") — она игнорирует ячейки с нерассчитанными формулами.

Для Excel 365 подойдёт динамическая формула массива: =СУММ(--(ЕНД(диапазон)=ЛОЖЬ)).

Можно ли посчитать заполненные ячейки в защищённом листе?

Да, но с ограничениями:

  • 🔓 Формулы (СЧЁТЗ, СЧЁТЕСЛИ) работают без изменений.
  • 🔒 Макросы не будут выполняться, если лист защищён с запретом на использование VBA.
  • 📊 Сводные таблицы и фильтры работают, если защита не блокирует эти функции.

Чтобы разблокировать макросы, снимите защиту с листа (Рецензирование → Снять защиту листа), но это потребует пароль (если он установлен).

Как посчитать заполненные ячейки в столбце, где данные добавляются автоматически?

Для динамических диапазонов используйте:

  • 📌 Таблицы Excel: Преобразуйте диапазон в таблицу (Ctrl+T), затем используйте =СЧЁТЗ(Таблица1[Столбец1]) — формула автоматически расширится при добавлении новых строк.
  • 📌 Динамические массивы (Excel 365): =СЧЁТЗ(A1:INDEX(A:A; СЧЁТЗ(A:A))) — диапазон будет расширяться до последней непустой ячейки.
  • 📌 Power Query: Настройте запрос на импорт данных с автоматическим обновлением (Данные → Обновить все).