Как быстро получить список всех листов в Excel: от простого к сложному

Почему стандартные методы не показывают все листы — и что с этим делать

Вы когда-нибудь теряли важный лист в огромной книге Excel, потому что его название скрыто за сотнями других вкладок? Или пытались автоматизировать отчёт, но скрипт упорно игнорировал половину данных? Проблема в том, что Excel по умолчанию не показывает полный список листов — ни в интерфейсе, ни в стандартных функциях. Даже опытные пользователи часто упускают, что скрытые листы (ОченьСкрытый тип) или листы с нестандартными символами в названиях могут "прятаться" от глаз.

В этой статье мы разберём 5 рабочих способов вытащить список всех листов — от элементарных (подойдёт даже для Excel 2010) до продвинутых (с использованием Power Query и VBA). Особое внимание уделим "подводным камням": например, почему функция SHEETS() иногда врёт, или как обойти ограничение на 255 символов в названиях листов при экспорте. Готовы? Начнём с самого простого.

Способ 1: Ручной просмотр через панель вкладок (для маленьких файлов)

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

  • 🔍 Прокручивать вкладки колесиком мыши или ползунком справа (если листов много, появится стрелка навигации).
  • 📌 Закреплять важные листы правой кнопкой → Закрепить вкладкуExcel 2016+).
  • 👁️ Показывать скрытые: правый клик по стрелкам навигации → Показать все листы (работает не во всех версиях!).

⚠️ Внимание: Этот метод не покажет листы, скрытые через VBA (xlSheetVeryHidden). Их можно обнаружить только программно (см. Способ 5). Также будьте осторожны с книгами, где названия листов начинаются на ' (апостроф) — они могут отображаться некорректно в панели.

📊 Как часто вы работаете с книгами Excel больше 50 листов?
Никогда
1-2 раза в месяц
Каждую неделю
Ежедневно

Способ 2: Функция SHEETS() — почему она не всегда работает

Функция =SHEETS() возвращает количество листов в книге, но имеет критические ограничения:

  1. Считает только видимые листы (скрытые игнорирует).
  2. Возвращает ошибку #N/A, если вызвана из другой книги.
  3. Не показывает имена листов — только их количество.

Чтобы получить список имён, придётся комбинировать её с другими функциями. Например, так:

=INDEX(GET.WORKBOOK(1), ROW(A1)) & T(NOW())

Но этот метод требует надстройки "Анализ данных" и работает нестабильно в новых версиях Excel. Гораздо надёжнее использовать Power Query (см. следующий раздел).

Почему SHEETS() игнорирует скрытые листы?

Функция была разработана для совместимости с Lotus 1-2-3 в 1990-х, где скрытые листы считались "внутренними" и не предназначались для пользовательских вычислений. Microsoft сохранила это поведение для обратной совместимости.

Метод Показывает скрытые? Требует VBA? Работает в Excel Online?
Ручной просмотр ❌ Нет ❌ Нет ✅ Да
SHEETS() ❌ Нет ❌ Нет ✅ Да
Power Query ✅ Да ❌ Нет ❌ Нет
VBA ✅ Да (включая VeryHidden) ✅ Да ❌ Нет

Способ 3: Power Query — автоматический экспорт списка листов

Power Query (или Get & Transform в новых версиях) — самый мощный инструмент для работы с метаданными книги. Он позволяет экспортировать список всех листов, включая скрытые, в отдельную таблицу. Вот пошаговая инструкция:

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

В редакторе Power Query введите в строку формул: =Excel.CurrentWorkbook()|

Нажмите Домой → Закрыть и загрузить → Закрыть и загрузить в...|

Выберите Только создать соединение и назовите запрос "СписокЛистов"|

Создайте новую таблицу на листе и свяжите её с запросом через Данные → Существующие подключения-->

⚠️ Внимание: Power Query не покажет листы, защищённые паролем, а также листы с названиями длинее 255 символов (они обрежутся). Чтобы обойти это ограничение, используйте VBA (см. следующий раздел).

Преимущество этого метода — динамическое обновление. Если вы добавите новый лист в книгу, достаточно обновить запрос (Данные → Обновить все), и список автоматически синхронизируется.

Способ 4: Формулы массива для продвинутых пользователей

Если вы не хотите использовать Power Query или VBA, можно обойтись формулами. Этот метод сложнее, но работает во всех версиях Excel (начиная с 2007). Мы будем использовать комбинацию функций INDIRECT, CELL и GET.WORKBOOK.

Создайте новый лист и введите в ячейку A1:

=IFERROR(INDEX(GET.WORKBOOK(1), ROW(A1)), "")

Затем протяните формулу вниз до тех пор, пока не появится пустая строка. Чтобы отфильтровать только имена листов (без служебной информации), добавьте столбец с формулой:

=IF(ISERROR(FIND("]", A1)), "", MID(A1, FIND("]", A1)+1, 255))

⚠️ Внимание: Функция GET.WORKBOOK считается "недокументированной" и может перестать работать в будущих версиях Excel. Microsoft не гарантирует её поддержку. Для критически важных задач используйте VBA.

Способ 5: VBA — универсальное решение для любых задач

Если вам нужно 100% надёжное решение, которое работает со всеми типами листов (включая VeryHidden), используйте VBA. Этот код создаст новый лист со списком всех листов книги, включая их статус (видимый/скрытый/очень скрытый):

Sub ExportSheetList()

Dim ws As Worksheet, newWs As Worksheet

Dim i As Integer, lastRow As Integer

' Создаём новый лист для результата

Set newWs = Worksheets.Add(After:=Worksheets(Worksheets.Count))

newWs.Name = "СписокЛистов"

' Заголовки таблицы

newWs.Cells(1, 1).Value = "№"

newWs.Cells(1, 2).Value = "Имя листа"

newWs.Cells(1, 3).Value = "Статус"

newWs.Cells(1, 4).Value = "Индекс"

' Перебираем все листы

i = 2

For Each ws In ThisWorkbook.Worksheets

newWs.Cells(i, 1).Value = i - 1

newWs.Cells(i, 2).Value = ws.Name

newWs.Cells(i, 4).Value = ws.Index

' Определяем статус листа

If ws.Visible = xlSheetVisible Then

newWs.Cells(i, 3).Value = "Видимый"

ElseIf ws.Visible = xlSheetHidden Then

newWs.Cells(i, 3).Value = "Скрытый"

ElseIf ws.Visible = xlSheetVeryHidden Then

newWs.Cells(i, 3).Value = "Очень скрытый (VBA)"

End If

i = i + 1

Next ws

' Форматируем таблицу

newWs.Range("A1:D1").Font.Bold = True

newWs.Columns("A:D").AutoFit

End Sub

Чтобы запустить макрос:

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте код в модуль (Insert → Module).
  3. Закройте редактор и запустите макрос через Разработчик → Макросы (или Alt + F8).

⚠️ Внимание: В книгах с очень большим количеством листов (500+) выполнение макроса может занять несколько секунд. Чтобы ускорить работу, отключите обновление экрана в начале кода, добавив строку Application.ScreenUpdating = False, и включите обратно в конце (Application.ScreenUpdating = True).

Бонус: Как экспортировать список листов в текстовый файл

Если вам нужно сохранить список листов вне книги Excel (например, для документации или передачи коллегам), используйте этот VBA-скрипт. Он создаст файл SheetList.txt на рабочем столе:

Sub ExportSheetListToFile()

Dim ws As Worksheet

Dim filePath As String

Dim fileNum As Integer

Dim content As String

filePath = Environ("USERPROFILE") & "\Desktop\SheetList.txt"

fileNum = FreeFile()

' Заголовок файла

content = "СПИСОК ЛИСТОВ КНИГИ: " & ThisWorkbook.Name & vbCrLf & vbCrLf

content = content & "№" & Tab(10) & "Имя листа" & Tab(30) & "Статус" & Tab(50) & "Индекс" & vbCrLf

content = content & String(70, "-") & vbCrLf

' Данные по каждому листу

Dim i As Integer: i = 1

For Each ws In ThisWorkbook.Worksheets

content = content & i & Tab(10) & ws.Name & Tab(30)

If ws.Visible = xlSheetVisible Then

content = content & "Видимый" & Tab(50)

ElseIf ws.Visible = xlSheetHidden Then

content = content & "Скрытый" & Tab(50)

Else

content = content & "Очень скрытый" & Tab(50)

End If

content = content & ws.Index & vbCrLf

i = i + 1

Next ws

' Сохраняем файл

Open filePath For Output As #fileNum

Print #fileNum, content

Close #fileNum

MsgBox "Список листов сохранён по пути: " & filePath, vbInformation

End Sub

Файл будет иметь табличный формат с выравниванием по колонкам. Если вам нужно экспортировать список в CSV для дальнейшей обработки, замените Tab() на запятые, а vbCrLf — на vbCr.

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

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

Да, но с ограничениями. Если книга закрыта, вы можете использовать формулу:

=EXTERNAL.DOCUMENT("C:\Путь\Книга.xlsx!-1")

Однако этот метод покажет только имена листов, без статуса видимости, и требует, чтобы путь к файлу был указан абсолютно (без ошибок). В Excel 2016+ для этой задачи лучше использовать Power Query с подключением к файлу как к внешнему источнику данных.

Почему в моём Excel нет функции GET.WORKBOOK?

Функция GET.WORKBOOK относится к категории "недокументированных" и по умолчанию отключена. Чтобы её активировать:

  1. Откройте Файл → Параметры → Формулы.
  2. В разделе Работа с формулами поставьте галочку Включить недокументированные функции (в некоторых версиях этот пункт может называться Разрешить legacy-функции).
  3. Перезапустите Excel.

Если пункта нет в настройках, значит ваша версия Excel его не поддерживает (например, Excel Online или Excel для Mac).

Как узнать, какие листы защищены паролем?

Стандартными средствами Excel это невозможно. Однако с помощью VBA можно проверить защиту листа:

Sub CheckProtectedSheets()

Dim ws As Worksheet

For Each ws In ThisWorkbook.Worksheets

If ws.ProtectContents Then

MsgBox "Лист '" & ws.Name & "' защищён паролем!", vbExclamation

End If

Next ws

End Sub

Обратите внимание: этот код не покажет сам пароль, а только факт защиты. Взлом паролей листов нарушает лицензионное соглашение Microsoft.

Можно ли получить список листов в Google Sheets?

Да, в Google Таблицах для этого есть специальная функция:

=ARRAYFORMULA(TO_TEXT(SORT(UNIQUE({Sheet1!A1:Z; Sheet2!A1:Z; ...}))))

Однако проще использовать скрипт Google Apps Script:

function listSheets() {

const ss = SpreadsheetApp.getActive();

const sheets = ss.getSheets();

let result = ["Список листов:", "Имя;Индекс;ID"];

sheets.forEach((sheet, i) => {

result.push(`${sheet.getName()};${i};${sheet.getSheetId()}`);

});

return result.join("\n");

}

Запустите его через Расширения → Apps Script, и результат отобразится в логе выполнения.

Почему после обновления Excel перестали работать мои макросы для списка листов?

Скорее всего, проблема в настройках безопасности макросов. После обновлений Excel (особенно в 2023-2026 годах) Microsoft ужесточила политику выполнения VBA. Проверьте:

  1. Откройте Файл → Параметры → Центр управления безопасностью → Параметры центра....
  2. В разделе Параметры макросов выберите Включить все макросы (не рекомендуется для недоверенных файлов!) или Отключить макросы с уведомлением.
  3. Если макросы подписаны цифровой подписью, добавьте издателя в Надёжные издатели.

Также убедитесь, что в книге включён доступ к объектной модели (Файл → Сведения → Разрешить редактирование).