Подсчёт заполненных ячеек в 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 | Текст | Да |
| A2 | 42 | Да |
| A3 | =СЕГОДНЯ() | Да |
| A4 | =ЕСЛИ(1=1; ""; "Да") | Да |
| A5 | (пусто) | Нет |
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: Фильтр по пустым/непустым ячейкам
- Выделите диапазон с данными (включая заголовки).
- Нажмите
Данные → Фильтр(илиCtrl+Shift+L). - Раскройте выпадающий список в заголовке столбца.
- Снимите галочку с
(Пусто)и оставьте только(Непустые). - Количество видимых строк в области данных — и есть количество заполненных ячеек.
Метод 2: Сводная таблица
- 📊 Выделите исходные данные (включая заголовки).
- Нажмите
Вставка → Сводная таблица. - В области "Строки" перетащите поле, по которому нужно посчитать заполненные ячейки.
- В область "Значения" перетащите то же поле — Excel автоматически посчитает количество непустых записей.
⚠️ Внимание: Визуальные методы не подходят для динамических данных, где количество заполненных ячеек меняется часто. В таких случаях лучше использовать формулы или Power Query.
Удалить пустые строки в исходном диапазоне|Проверить формат данных (числа как числа, даты как даты)|Добавить заголовки столбцов|Убедиться, что нет объединённых ячеек-->
5. Продвинутые методы: Power Query и массивы
Для обработки больших объёмов данных (десятки тысяч строк) или сложных условий подсчёта рекомендуем использовать Power Query — инструмент ETL (извлечение, преобразование, загрузка), встроенный в Excel 2016 и новее.
Алгоритм подсчёта непустых ячеек через Power Query:
- Выделите исходный диапазон и нажмите
Данные → Из таблицы/диапазона(илиДанные → Получить данные → Из таблицы/диапазонав Excel 2016). - В открывшемся редакторе Power Query выделите столбец, в котором нужно посчитать заполненные ячейки.
- Нажмите
Преобразовать → Заменить значенияи замените пустые ячейки на уникальный маркер (например,#PUSTO#). - Добавьте новый столбец с формулой:
= if [Column1] <> "#PUSTO#" then 1 else 0(заменитеColumn1на имя вашего столбца). - Удалите исходный столбец, оставив только столбец с единицами/нулями.
- Нажмите
Главная → Закрыть и загрузить в...и выберите "Только создать связь". - Вернитесь на лист и создайте сводную таблицу на основе загруженных данных, где просуммируйте столбец с единицами.
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
Как использовать макрос:
- Нажмите
Alt+F11, чтобы открыть редактор VBA. - Вставьте код в модуль (меню
Insert → Module). - Вернитесь на лист и введите формулу:
=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 установлен нужный цвет фона.
⚠️ Внимание: Макросы работают только в файлах с расширением
Отключите автоматический пересчёт формул и обновление экрана перед запуском макроса, добавив в начало кода строки: Application.Calculation = xlCalculationManual А в конец кода — строки возврата исходных настроек: Application.Calculation = xlCalculationAutomatic Это ускорит выполнение макроса в 5–10 раз для диапазонов свыше 100 000 строк..xlsm (с поддержкой макросов). При первом запуске может потребоваться разрешить выполнение макросов в настройках безопасности Excel (Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Параметры макросов).
Как ускорить работу макроса для больших диапазонов?
Application.ScreenUpdating = False
Application.ScreenUpdating = True
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) (вернёт ИСТИНА только для истинно пустых ячеек).
Как посчитать заполненные ячейки в диапазоне с формулами, которые ещё не рассчитаны?
Если в ячейках есть формулы, которые ещё не обновлялись (отображается старое значение), используйте:
- Принудительный пересчёт:
F9(для текущего листа) илиCtrl+Alt+F9(для всей книги). - Функцию
=СЧЁТЕСЛИ(диапазон; "<>#ЗАНЯТО!")— она игнорирует ячейки с нерассчитанными формулами.
Для Excel 365 подойдёт динамическая формула массива: =СУММ(--(ЕНД(диапазон)=ЛОЖЬ)).
Можно ли посчитать заполненные ячейки в защищённом листе?
Да, но с ограничениями:
- 🔓 Формулы (
СЧЁТЗ,СЧЁТЕСЛИ) работают без изменений. - 🔒 Макросы не будут выполняться, если лист защищён с запретом на использование VBA.
- 📊 Сводные таблицы и фильтры работают, если защита не блокирует эти функции.
Чтобы разблокировать макросы, снимите защиту с листа (Рецензирование → Снять защиту листа), но это потребует пароль (если он установлен).
Как посчитать заполненные ячейки в столбце, где данные добавляются автоматически?
Для динамических диапазонов используйте:
- 📌 Таблицы Excel: Преобразуйте диапазон в таблицу (
Ctrl+T), затем используйте=СЧЁТЗ(Таблица1[Столбец1])— формула автоматически расширится при добавлении новых строк. - 📌 Динамические массивы (Excel 365):
=СЧЁТЗ(A1:INDEX(A:A; СЧЁТЗ(A:A)))— диапазон будет расширяться до последней непустой ячейки. - 📌 Power Query: Настройте запрос на импорт данных с автоматическим обновлением (
Данные → Обновить все).