Как узнать количество листов в Excel: от ручного подсчёта до автоматизации

Работа с большими книгами Microsoft Excel часто требует контроля над структурой документа — особенно когда речь идёт о десятках или даже сотнях листов. Опытные пользователи знают, что потерять счет в многостраничной таблице так же легко, как забыть сохраненный файл. Но как быстро посчитать количество листов без ручного перелистывания каждого? Спойлер: способов больше, чем кажется на первый взгляд.

В этой статье мы разберём все актуальные методы — от базовых (доступных даже новичкам) до продвинутых (с использованием VBA и формул). Вы узнаете, как получить точный подсчёт за 2 клика, почему иногда Excel показывает неверное число листов, и как автоматизировать процесс для регулярного использования. А ещё — уникальный лайфхак для скрытых листов, о котором не пишут в стандартных гайдах.

1. Самый простой способ: визуальный подсчёт в панели листов

Если книга содержит не более 20-30 листов, самый очевидный метод — использовать встроенную панель навигации в нижней части окна Excel. Здесь отображаются ярлычки всех листов с возможностью прокрутки. Достаточно посчитать их количество вручную или воспользоваться скроллом, чтобы дойти до последнего.

Однако у этого метода есть существенные ограничения:

  • 🔹 Не работает для скрытых листов (их просто не видно в панели)
  • 🔹 При большом количестве листов (50+) легко сбиться со счёта
  • 🔹 Нет возможности быстро обновить число при добавлении/удалении листов

Чтобы ускорить процесс, используйте сочетание клавиш:

  • 🔼 Ctrl + PageUp — переключение на предыдущий лист
  • 🔽 Ctrl + PageDown — переключение на следующий лист
⚠️ Внимание: В Excel Online и мобильной версии приложения клавиатурные сочетания могут не работать. В этом случае используйте свайпы по панели листов (на телефоне) или кнопки навигации в веб-интерфейсе.
📊 Как часто вы работаете с книгами Excel, содержащими более 10 листов?
Ежедневно
Несколько раз в неделю
Редко
Никогда

2. Использование строки состояния (Status Bar)

Малоизвестный трюк: Excel может показывать количество листов прямо в строке состояния (внизу окна). Для этого:

  1. Выделите любой лист в книге (кликните по его ярлычку)
  2. Удерживайте клавишу Ctrl и кликните по другим листам, чтобы выбрать их все
  3. В правом нижнем углу окна появится надпись "Листов: X", где X — общее количество

Этот метод работает во всех версиях Excel (начиная с 2007) и не требует установки дополнительных надстроек. Главный плюс — мгновенный результат без необходимости прокручивать все листы. Однако он тоже не учитывает скрытые листы.

3. Формула для подсчёта листов (без VBA)

Для тех, кто предпочитает автоматизацию, есть решение с использованием формулы. К сожалению, в Excel нет встроенной функции вроде COUNT_SHEETS(), но мы можем обойти это ограничение с помощью динамического массива и функции GET.WORKBOOK().

Вставьте этот код в любую ячейку:

=LET(

данные; GET.WORKBOOK(1);

фильтр; FILTER(данные; LEFT(данные; 1) = "[");

COUNT(фильтр)

)

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

  1. GET.WORKBOOK(1) — возвращает массив с информацией о всех листах книги
  2. FILTER — оставляет только строки, начинающиеся с "[", которые соответствуют листам
  3. COUNT — подсчитывает количество отфильтрованных элементов
⚠️ Внимание: Функция GET.WORKBOOK() доступна только в Excel 365 и Excel 2021. В более старых версиях (2019 и ниже) этот метод не сработает.
Альтернатива для Excel 2019 и ниже

Используйте надстройку Power Query: перейдите в Данные → Получить данные → Из других источников → Пустая запрос и введите в редакторе код:

= Excel.CurrentWorkbook(){[Name="SheetNames"]}[Content]

Затем создайте таблицу на основе этого запроса и используйте COUNTA() для подсчёта строк.

4. VBA-скрипт для точного подсчёта (включая скрытые листы)

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

Function CountAllSheets() As Integer

Dim ws As Worksheet

Dim hiddenCount As Integer

hiddenCount = 0

For Each ws In ThisWorkbook.Worksheets

If ws.Visible = xlSheetVeryHidden Or ws.Visible = xlSheetHidden Then

hiddenCount = hiddenCount + 1

End If

Next ws

CountAllSheets = ThisWorkbook.Worksheets.Count + hiddenCount

End Function

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

  1. Нажмите Alt + F11, чтобы открыть редактор VBA
  2. Вставьте код в модуль (вставка → модуль)
  3. Вернитесь в Excel и в любой ячейке введите =CountAllSheets()

Преимущества этого метода:

  • 📊 Учитывает все типы листов, включая скрытые (xlSheetHidden) и очень скрытые (xlSheetVeryHidden)
  • 🔄 Обновляется автоматически при изменении книги
  • 📌 Можно интегрировать в другие макросы для комплексных отчётов

Включить поддержку макросов в настройках Excel|Проверить, что книга сохранена в формате .xlsm|Открыть редактор VBA через Alt+F11|Создать новый модуль для кода|Запустить макрос через F5 или из меню-->

5. Сравнение методов: какой выбрать?

Выбор оптимального способа зависит от ваших задач и версии Excel. Ниже таблица сравнения всех рассмотренных методов:

Метод Учитывает скрытые листы Работает в Excel 2010-2019 Требует навыков программирования Автоматическое обновление
Визуальный подсчёт ❌ Нет ✅ Да ❌ Нет ❌ Нет
Строка состояния ❌ Нет ✅ Да ❌ Нет ❌ Нет
Формула с GET.WORKBOOK ❌ Нет ❌ Только 2021/365 ⚠️ Базовые знания ✅ Да
VBA-скрипт ✅ Да ✅ Да ⚠️ Средние знания ✅ Да
Power Query (альтернатива) ✅ Да ✅ Да (с 2016) ⚠️ Базовые знания ✅ Да

Для большинства пользователей оптимальным решением будет комбинация строки состояния (для быстрого просмотра) и VBA-скрипта (для точного подсчёта со скрытыми листами). Если вы работаете в Excel 365, формула с GET.WORKBOOK станет отличной альтернативой без необходимости включать макросы.

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

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

1. Формула возвращает #NAME?

Причина: функция GET.WORKBOOK недоступна в вашей версии Excel. Решение — используйте VBA или обновите программу до Excel 365.

2. VBA-скрипт считает листы неверно

Причина: в книге есть листы-диаграммы (Chart Sheets), которые не учитываются по умолчанию. Исправленный код:

Function CountAllSheets() As Integer

Dim sh As Object

CountAllSheets = 0

For Each sh In ThisWorkbook.Sheets

CountAllSheets = CountAllSheets + 1

Next sh

End Function

3. Скрытые листы не отображаются в строке состояния

Это не ошибка, а особенность Excel. Чтобы увидеть скрытые листы, используйте VBA или перейдите в Вид → Показать → Показать лист (но это придётся делать для каждого скрытого листа отдельно).

4. Макрос не запускается

Убедитесь, что:

  • 🔹 Книга сохранена в формате .xlsm (с поддержкой макросов)
  • 🔹 В настройках безопасности разрешены макросы (Файл → Параметры → Центр управления безопасностью)
  • 🔹 Код вставлен в стандартный модуль, а не в лист или книгу

7. Продвинутые сценарии: автоматизация для регулярных отчётов

Если вам нужно ежедневно обрабатывать книги с сотнями листов, ручные методы станут тормозить работу. Рассмотрим два сценария автоматизации:

Сценарий 1: Еженедельный отчёт по количеству листов в папке

Создайте макрос, который:

  1. Сканирует указанную папку на наличие .xlsx/.xlsm файлов
  2. Для каждого файла подсчитывает листы (включая скрытые)
  3. Сохраняет результаты в отдельную сводную таблицу

Пример кода:

Sub CountSheetsInFolder()

Dim fso As Object, folder As Object, file As Object

Dim wb As Workbook, ws As Worksheet

Dim folderPath As String, resultSheet As Worksheet

folderPath = "C:\YourFolderPath\" ' Укажите путь к папке

Set fso = CreateObject("Scripting.FileSystemObject")

Set folder = fso.GetFolder(folderPath)

Set resultSheet = ThisWorkbook.Sheets.Add

resultSheet.Cells(1, 1).Value = "Файл"

resultSheet.Cells(1, 2).Value = "Количество листов"

Dim rowNum As Integer: rowNum = 2

For Each file In folder.Files

If LCase(fso.GetExtensionName(file.Name)) = "xlsx" Or _

LCase(fso.GetExtensionName(file.Name)) = "xlsm" Then

Set wb = Workbooks.Open(file.Path)

resultSheet.Cells(rowNum, 1).Value = file.Name

resultSheet.Cells(rowNum, 2).Value = wb.Sheets.Count

wb.Close SaveChanges:=False

rowNum = rowNum + 1

End If

Next file

End Sub

Сценарий 2: Уведомление при превышении лимита листов

Если в вашей компании есть правило "не более 50 листов в одной книге", можно создать макрос, который:

  • 🔔 Проверяет количество листов при открытии файла
  • 📢 Выводит предупреждение, если лимит превышен
  • 📤 Автоматически отправляет уведомление на email ответственному лицу

Для этого используйте событие Workbook_Open() в модуле ThisWorkbook:

Private Sub Workbook_Open()

Const MAX_SHEETS As Integer = 50

If ThisWorkbook.Sheets.Count > MAX_SHEETS Then

MsgBox "Внимание! Количество листов (" & ThisWorkbook.Sheets.Count & ") превышает допустимый лимит (" & MAX_SHEETS & ")." & vbCrLf & _

"Рекомендуется разделить книгу на несколько файлов.", vbExclamation, "Предупреждение"

End If

End Sub

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

Можно ли посчитать листы в Excel Online?

В веб-версии Excel функционал ограничен. Вы можете:

  • Использовать визуальный подсчёт в панели листов (но без клавиатурных сочетаний)
  • Применить строку состояния (правый клик → "Число")

Макросы и формулы типа GET.WORKBOOK в Excel Online не работают.

Почему формула =SHEETS() не работает?

Функция =SHEETS() существует, но она возвращает количество листов в ссылке, а не в текущей книге. Например, =SHEETS(A1:D5) вернёт 1, потому что ссылка относится к одному листу. Для подсчёта всех листов книги эта функция не подходит.

Как посчитать листы в защищённой книге?

Если книга защищена паролем, большинство методов (включая VBA) не сработают без ввода пароля. Обходные пути:

  • 🔓 Попросите владельца файла временно снять защиту
  • 📂 Создайте копию книги и удалите защиту (если у вас есть права)
  • 👁️ Используйте визуальный подсчёт (если листы не скрыты)

Внимание: попытка взлома защиты книги нарушает лицензионное соглашение Microsoft.

Можно ли посчитать листы в закрытой книге?

Да, но только с помощью VBA. Пример кода для подсчёта листов в закрытом файле:

Function CountSheetsInClosedWorkbook(filePath As String) As Integer

Dim wb As Workbook

Set wb = Workbooks.Open(filePath, UpdateLinks:=0, ReadOnly:=True)

CountSheetsInClosedWorkbook = wb.Sheets.Count

wb.Close SaveChanges:=False

End Function

Используйте так: =CountSheetsInClosedWorkbook("C:\Path\To\Your\File.xlsx").

Как посчитать листы определённого типа (например, только таблицы)?

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

Function CountWorksheetsOnly() As Integer

Dim ws As Worksheet

CountWorksheetsOnly = 0

For Each ws In ThisWorkbook.Worksheets

CountWorksheetsOnly = CountWorksheetsOnly + 1

Next ws

End Function

Для подсчёта диаграмм используйте ThisWorkbook.Charts.Count.