При попытке определить количество столбцов с данными в 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<>"""));""))
Пошаговое объяснение:
СТОЛБЕЦ(A1:Z1)-СТОЛБЕЦ(A1)+1— создаёт массив номеров столбцов (1, 2, 3, ...).ФИЛЬТР(...; (A1:Z100<>""""))— оставляет только номера столбцов, где есть непустые ячейки.СЧЁТ— подсчитывает количество оставшихся элементов.
✅ Преимущества:
- ⚡ Работает в реальном времени: результат обновляется при изменении данных.
- 📱 Поддерживается в мобильной версии Excel (в отличие от VBA).
- 🔄 Легко модифицировать для учёта конкретных условий (например,
A1:Z100>100).
⚠️ Внимание: В старых версиях Excel (2019 и ранее) эта формула вернёт ошибку #ИМЯ?. Используйте методы из разделов 1–3.
5. Автоматизация через Power Query (для больших таблиц)
Если таблица содержит десятки тысяч строк или сотни столбцов, формулы могут тормозить. В этом случае эффективнее использовать Power Query:
- Выделите диапазон данных и нажмите
Данные → Из таблицы/диапазона(илиData → Get Data → From Table/Range). - В открывшемся редакторе Power Query добавьте пользовательский столбец с формулой:
= Table.ColumnCount(Table.SelectColumns(#"Предыдущий шаг", List.Select(Table.ColumnNames(#"Предыдущий шаг"), each List.NonNullCount(Table.Column(#"Предыдущий шаг", _)) > 0))) - Удалите все столбцы кроме нового, переименуйте его в "Количество непустых столбцов" и нажмите
Закрыть и загрузить.
Плюсы метода:
- ⚡ Обрабатывает миллионы строк без замедления.
- 🔄 Обновляется одним кликом (
Данные → Обновить все). - 📊 Можно интегрировать в 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
Как применять:
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - Вставьте код в модуль (
Insert → Module). - В ячейке листа используйте формулу:
=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))
Как посчитать непустые столбцы в сводной таблице?
Сводные таблицы не поддерживают прямые формулы для подсчёта столбцов. Решения:
Можно ли автоматически обновлять результат при добавлении новых столбцов?
Да, для этого:
- В Excel 365 используйте динамические массивы (см. раздел 4) — они обновляются автоматически.
- В старых версиях настройте именованный диапазон с формулой:
=СМЕЩ(Лист1!$A$1;0;0;СЧЁТЗ(Лист1!$A:$A);СЧЁТЕСЛИ(Лист1!$1:$1;"<>"""))Затем ссылайтесь на этот диапазон в основной формуле.
- Для Power Query настройте автоматическое обновление при открытии файла (
Свойства связи → Обновлять при открытии).