Как посчитать количество непустых столбцов в Excel: от простых формул до VBA

При попытке определить количество столбцов с данными в Microsoft Excel стандартная функция СЧЁТ или COUNTA не сработает — они считают только непустые ячейки в выделенном диапазоне, а не целые столбцы. Проблема усложняется, если данные расположены не подряд или перемежованы пустыми строками. Например, в таблице с 20 столбцами реально заполнено только 7, но как это быстро вычислить без ручного подсчёта?

В этой статье разберём 5 рабочих методов — от элементарных формул массива до автоматизации через Power Query и VBA. Все решения протестированы на Excel 2010–2023 и Office 365, включая веб-версию. Особое внимание уделим нюансам: как игнорировать скрытые столбцы, учитывать только числовые данные или исключать ячейки с формулами, которые возвращают пустую строку ("").

1. Быстрый способ: функция СЧЁТЕСЛИ для диапазона столбцов

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

=МАКС(СЧЁТЕСЛИ(A1:Z1;"<>"""); СЧЁТЕСЛИ(A1:Z1;"<>0"))

Как работает:

  • 🔍 СЧЁТЕСЛИ(A1:Z1;"<>"""") — считает ячейки в первой строке, которые не пустые (включая текст и числа).
  • 🔢 СЧЁТЕСЛИ(A1:Z1;"<>0") — дополнительно учитывает ячейки с нулём (если они важны для вашего случая).
  • МАКС — выбирает большее значение из двух проверок, чтобы не пропустить столбцы с нулевыми значениями.

⚠️ Внимание: Метод не подходит, если первая строка содержит заголовки, а данные начинаются ниже. В этом случае замените A1:Z1 на строку с реальными данными (например, A2:Z2).

2. Универсальная формула массива для любых данных

Для таблиц с пропусками или нерегулярным заполнением подойдёт формула массива на основе СУММПРОИЗВ и СТОЛБЕЦ. Она анализирует весь диапазон и возвращает количество столбцов, где хотя бы одна ячейка не пуста:

=СУММПРОИЗВ(--(СЧЁТЕСЛИ(А1:Z100;"<>""")>0))

Разбор:

  • 📊 СЧЁТЕСЛИ(А1:Z100;"<>"""") — считает непустые ячейки в каждом столбце диапазона A1:Z100.
  • 🔎 >0 — проверяет, есть ли хотя бы одна непустая ячейка в столбце.
  • 💡 -- — преобразует логические значения (ИСТИНА/ЛОЖЬ) в 1/0 для суммирования.

📌 Пример: Если в диапазоне A1:D100 заполнены только столбцы A, B и D, формула вернёт 3.

⚠️ Внимание: Формула чувствительна к размеру диапазона. Если указать A1:Z1000 вместо A1:Z100, расчёт замедлится в 10 раз. Оптимально сужать диапазон до реального количества строк (например, A1:Z50).

1. Убедитесь, что в диапазоне нет скрытых строк/столбцов (они учитываются в расчёте).

2. Замените A1:Z100 на актуальный диапазон ваших данных.

3. Если нужны только числовые столбцы, замените "<>"""" на "<>0".

4. Для Excel 365 используйте ФИЛЬТР + СТОЛБЕЦ (см. раздел 4).

-->

3. Подсчёт столбцов с учётом типов данных (текст, числа, даты)

Если требуется посчитать столбцы с конкретным типом данных (например, только числа или даты), модифицируйте формулу:

Тип данныхФормулаПример результата
Любые непустые ячейки=СУММПРОИЗВ(--(СЧЁТЕСЛИ(А1:Z100;"<>""")>0))Столбцы с текстом, числами, датами
Только числа=СУММПРОИЗВ(--(СЧЁТ(А1:Z100)>0))Игнорирует текст и пустые ячейки
Только текст=СУММПРОИЗВ(--(СЧЁТЗ(А1:Z100)-СЧЁТ(А1:Z100)>0))Столбцы с хотя бы одной текстовой ячейкой
Дата/время=СУММПРОИЗВ(--(СЧЁТЕСЛИ(А1:Z100;">=43000")>0))Столбцы с датами (43000 = 14.10.2017)

Нюансы:

  • 📅 Для дат используйте число, соответствующее минимальной дате в вашей таблице (в Excel даты хранятся как числа).
  • 🔢 СЧЁТЗ считает все непустые ячейки, а СЧЁТ — только числовые.
  • 📌 Если в столбце есть и текст, и числа, он будет учтён в обоих вариантах формул.

Любые непустые ячейки|Только числа|Только текст|Дата/время-->

4. Современный подход: функции ФИЛЬТР и ПОСЛСИМВОЛ (Excel 365)

В Excel 365 и Excel 2021 появились динамические массивы, упрощающие задачу. Например, комбинация ФИЛЬТР + СТОЛБЕЦ позволяет обойтись без формул массива:

=СЧЁТ(ЕСЛИОШИБКА(ФИЛЬТР(СТОЛБЕЦ(A1:Z1)-СТОЛБЕЦ(A1)+1; (A1:Z100<>"""));""))

Пошаговое объяснение:

  1. СТОЛБЕЦ(A1:Z1)-СТОЛБЕЦ(A1)+1 — создаёт массив номеров столбцов (1, 2, 3, ...).
  2. ФИЛЬТР(...; (A1:Z100<>"""")) — оставляет только номера столбцов, где есть непустые ячейки.
  3. СЧЁТ — подсчитывает количество оставшихся элементов.

Преимущества:

  • ⚡ Работает в реальном времени: результат обновляется при изменении данных.
  • 📱 Поддерживается в мобильной версии Excel (в отличие от VBA).
  • 🔄 Легко модифицировать для учёта конкретных условий (например, A1:Z100>100).

⚠️ Внимание: В старых версиях Excel (2019 и ранее) эта формула вернёт ошибку #ИМЯ?. Используйте методы из разделов 1–3.

5. Автоматизация через Power Query (для больших таблиц)

Если таблица содержит десятки тысяч строк или сотни столбцов, формулы могут тормозить. В этом случае эффективнее использовать Power Query:

  1. Выделите диапазон данных и нажмите Данные → Из таблицы/диапазона (или Data → Get Data → From Table/Range).
  2. В открывшемся редакторе Power Query добавьте пользовательский столбец с формулой:
    = Table.ColumnCount(Table.SelectColumns(#"Предыдущий шаг", List.Select(Table.ColumnNames(#"Предыдущий шаг"), each List.NonNullCount(Table.Column(#"Предыдущий шаг", _)) > 0)))
  3. Удалите все столбцы кроме нового, переименуйте его в "Количество непустых столбцов" и нажмите Закрыть и загрузить.

Плюсы метода:

  • ⚡ Обрабатывает миллионы строк без замедления.
  • 🔄 Обновляется одним кликом (Данные → Обновить все).
  • 📊 Можно интегрировать в Power Pivot для сложного анализа.

📌 Пример: Если исходная таблица имеет 50 столбцов, но заполнено только 12, результат будет 12.

Как вернуть список имён непустых столбцов в Power Query

1. В редакторе Power Query добавьте пользовательский столбец с формулой:

= Table.ColumnNames(Table.SelectColumns(#"Предыдущий шаг", List.Select(Table.ColumnNames(#"Предыдущий шаг"), each List.NonNullCount(Table.Column(#"Предыдущий шаг", _)) > 0)))

2. Разверните полученный список в новый столбец (кнопка в заголовке столбца).

3. Удалите вспомогательные столбцы, оставьте только имена.

6. VBA-скрипт для сложных условий

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

Function CountNonEmptyColumns(rng As Range) As Long

Dim col As Range, count As Long

count = 0

For Each col In rng.Columns

If WorksheetFunction.CountA(col) > 0 Then

If Not col.EntireColumn.Hidden Then ' Пропускаем скрытые столбцы

count = count + 1

End If

End If

Next col

CountNonEmptyColumns = count

End Function

Как применять:

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте код в модуль (Insert → Module).
  3. В ячейке листа используйте формулу: =CountNonEmptyColumns(A1:Z100).

Дополнительные возможности:

  • 🔍 Чтобы учитывать только видимые строки, добавьте проверку If Not col.Rows(1).Hidden Then.
  • 📅 Для учёта только дат замените CountA на цикл с IsDate.
  • 🔢 Чтобы игнорировать ячейки с формулами, возвращающими "", используйте If col.Cells(1,1).Value <> "" Then.

⚠️ Внимание: Макросы работают только в файлах с расширением .xlsm. При открытии файла из ненадёжного источника Excel заблокирует выполнение кода.

Частые ошибки и как их избежать

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

ОшибкаПричинаРешение
Формула возвращает 0Диапазон указан неверно (например, A1:A100 вместо A1:Z100)Проверьте адресацию: первый параметр — ячейка, второй — весь диапазон столбцов.
Результат завышенУчтены столбцы с формулами, возвращающими ""Используйте СЧЁТЗ вместо СЧЁТЕСЛИ или модифицируйте условие на "<>"&"""".
#ЗНАЧ! в Excel 2019Формула массива не подтверждена Ctrl+Shift+EnterВведите формулу и нажмите Ctrl+Shift+Enter (в новых версиях не требуется).
Макрос не работаетОтключены макросы в настройках безопасностиПерейдите в Файл → Параметры → Центр управления безопасностью → Параметры центра... и включите макросы.

📌 Совет: Если формула тормозит, разбейте её на части. Например, сначала посчитайте непустые ячейки в каждом столбце отдельно, а затем просуммируйте результаты.

FAQ: Ответы на популярные вопросы

Можно ли посчитать непустые столбцы в Google Таблицах?

Да, используйте аналогичные формулы:

  • Для простого подсчёта: =COUNTA(FILTER(A1:Z1; A1:Z1<>"")).
  • Для учёта всех строк: =SUMPRODUCT(--(MMULT(--(A1:Z100<>""); TRANSPOSE(COLUMN(A1:Z1)^0))>0)).

⚠️ В Google Таблицах нет СУММПРОИЗВ, поэтому используйте SUMPRODUCT.

Как исключить столбцы с формулами, которые возвращают пустую строку?

Используйте комбинацию ЕСЛИОШИБКА + ДЛСТР:

=СУММПРОИЗВ(--(СЧЁТЕСЛИ(А1:Z100;"<>"""")+ЕСЛИОШИБКА(ДЛСТР(А1:Z100);0)>0))

Эта формула учитывает ячейки, которые:

  • Содержат любые данные (СЧЁТЕСЛИ),
  • Или имеют формулу, возвращающую текст (проверка ДЛСТР).
Почему формула считает столбцы с пробелами как непустые?

Функция СЧЁТЕСЛИ воспринимает пробел как символ, поэтому столбец с ячейкой " " будет учтён. Чтобы игнорировать пробелы, модифицируйте условие:

=СУММПРОИЗВ(--(СЧЁТЕСЛИ(А1:Z100;"<>"""")-СЧЁТЕСЛИ(А1:Z100;" ")>0))

Или используйте СЖПРОБЕЛЫ для предварительной очистки:

=СУММПРОИЗВ(--(СЧЁТЕСЛИ(СЖПРОБЕЛЫ(А1:Z100);"<>"&""""))>0))
Как посчитать непустые столбцы в сводной таблице?

Сводные таблицы не поддерживают прямые формулы для подсчёта столбцов. Решения:

  1. Создайте копию исходных данных и примените формулу из раздела 2.
  2. Используйте Power Query (см. раздел 5), подключив его к сводной таблице как к источнику.
  3. Напишите VBA-скрипт, который анализирует поле PivotTable.ColumnRange.
Можно ли автоматически обновлять результат при добавлении новых столбцов?

Да, для этого:

  • В Excel 365 используйте динамические массивы (см. раздел 4) — они обновляются автоматически.
  • В старых версиях настройте именованный диапазон с формулой:
    =СМЕЩ(Лист1!$A$1;0;0;СЧЁТЗ(Лист1!$A:$A);СЧЁТЕСЛИ(Лист1!$1:$1;"<>"""))

    Затем ссылайтесь на этот диапазон в основной формуле.

  • Для Power Query настройте автоматическое обновление при открытии файла (Свойства связи → Обновлять при открытии).