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

Работа с большими книгами Microsoft Excel часто требует навигации между десятками листов, и потерять обзор среди них проще, чем кажется. Представьте: вы получили файл с 50 вкладками, названными по проектам, месяцам или отделам. Как быстро сориентироваться, не листая их по одному? Или еще хуже — как автоматически собрать данные со всех листов, если вы даже не знаете их точных названий?

Список всех листов в Excel решает эти проблемы. Он позволяет не только визуализировать структуру книги, но и использовать его для динамических ссылок, сводных отчетов или даже автоматизации через макросы. В этой статье мы разберем 5 проверенных методов — от элементарных до продвинутых, — которые подойдут как новичкам, так и опытным пользователям. Вы узнаете, как создать такой список без программирования и как ускорить процесс с помощью VBA, если листов сотни.

Важно: методы работают во всех актуальных версиях Excel 2016–2026 и Microsoft 365, включая веб-версию (с ограничениями). Для макросов потребуется включить поддержку VBA в настройках безопасности.

1. Ручной метод: копирование названий листов вручную

Самый простой, но самый трудоемкий способ — скопировать названия листов вручную. Он подходит, если в книге не больше 10–15 вкладок и вам нужно одноразовое решение.

Алгоритм действий:

  1. Создайте новый лист (нажмите Shift + F11 или кнопку + рядом с существующими вкладками).
  2. Переименуйте его, например, в "Список листов".
  3. Переходите поочередно на каждый лист книги, фиксируйте его название и вводите в столбец A нового листа.

Плюсы: не требует знаний формул или макросов, работает в любой версии Excel.

Минусы: занимает много времени, высока вероятность ошибки при большом количестве листов.

⚠️ Внимание: Если названия листов содержат специальные символы (например, :, ?, *), их придется экранировать при дальнейшем использовании в формулах. Это может усложнить работу с ручным списком.

Этот метод удобно комбинировать с гиперссылками для быстрой навигации. Чтобы создать гиперссылку на лист, используйте функцию =ГИПЕРССЫЛКА:

=ГИПЕРССЫЛКА("#" & A1 & "!A1"; A1)

Где A1 — ячейка с названием листа.

2. Использование функции ПОЛУЧИТЬ.ДАННЫЕ.СВЯЗИ (для Excel 365 и 2021)

В новых версиях Excel появилась мощная функция ПОЛУЧИТЬ.ДАННЫЕ.СВЯЗИ (LET), которая позволяет извлекать данные о структуре книги, включая список листов. Этот метод полуавтоматический и не требует макросов.

Вставьте в ячейку A1 нового листа следующую формулу:

=ПОЛУЧИТЬ.ДАННЫЕ.СВЯЗИ(

"имена_листов";

ЛЯМБДА(книга;

ТЕКСТДОБАВ(

"";

ПОВТОР(" "; 100);

ТЕКСТПОСЛЕ(

ФИЛЬТР(

XMLФИЛЬТР(

"" & ПОДСТАВИТЬ(

ФОРМУЛА.ТЕКСТ(книга & "!A1");

книга & "!";

""

) & "";

"//x"

);

{"#ЗНАЧ!"; "#ССЫЛ!"};

ЛОЖЬ

);

"!A1"

)

)

);

ЭТОТ_ФАЙЛ()

)

Формула может показаться сложной, но она автоматически обновляется при добавлении или удалении листов. Результат — столбец с названиями всех вкладок книги.

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

  • 📌 Функция ЭТОТ_ФАЙЛ() возвращает ссылку на текущую книгу.
  • 📌 ФОРМУЛА.ТЕКСТ преобразует ссылку на ячейку в текст, из которого извлекается имя листа.
  • 📌 XMLФИЛЬТР и ТЕКСТПОСЛЕ очищают данные от мусора.
⚠️ Внимание: В Excel 2019 и более ранних версиях эта формула не работает — используйте альтернативные методы из следующих разделов.

3. Формула на основе ДВССЫЛ и ИМЯ (универсальный метод)

Этот способ работает во всех версиях Excel и не требует VBA. Он основан на использовании функции ДВССЫЛ, которая динамически ссылается на листы, и функции ИМЯ для извлечения их названий.

Шаг 1. Создайте новый лист и введите в ячейку A1 формулу:

=ДВССЫЛ("имя_листа!A1")

Нажмите Enter — появится ошибка #ССЫЛ!. Это нормально.

Шаг 2. Перейдите в Формулы → Диспетчер имен и создайте новое имя:

  • 📌 Имя: имя_листа
  • 📌 Область: Эта книга
  • 📌 Формула:
    =ПОДСТАВИТЬ(ПОЛУЧИТЬ.ЯЧЕЙКУ(48;!A1);"!"&ПОЛУЧИТЬ.ЯЧЕЙКУ(48;!A1);"")

Шаг 3. Вернитесь на лист со списком. Теперь формула в A1 вернет название первого листа книги. Протяните ее вниз — в каждой ячейке будет отображаться следующий лист.

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

  • 🔄 Работает в Excel 2010–2026.
  • 🔄 Автоматически обновляется при изменении структуры книги.
  • 🔄 Можно использовать для создания динамических диапазонов.
Метод Сложность Автообновление Поддержка версий
Ручной ввод ❌ Нет Все версии
ПОЛУЧИТЬ.ДАННЫЕ.СВЯЗИ ⭐⭐⭐ ✅ Да Excel 365, 2021
ДВССЫЛ + ИМЯ ⭐⭐ ✅ Да Excel 2010–2026
📊 Какой метод вы используете чаще для работы с листами?
Ручной ввод
Формулы (ДВССЫЛ, ИМЯ)
Макросы VBA
Другие способы

4. Макрос VBA: автоматическое создание списка листов

Если в книге десятки или сотни листов, ручные методы становятся неэффективными. Здесь на помощь приходит VBA — язык макросов Excel, который позволяет автоматизировать задачу за секунды.

Шаг 1. Откройте редактор VBA:

  • 📌 Нажмите Alt + F11.
  • 📌 В меню выберите Insert → Module.

Шаг 2. Вставьте следующий код:

Sub СписокЛистов()

Dim ws As Worksheet

Dim i As Integer

Dim targetSheet As Worksheet

' Создаем новый лист для списка (или используем существующий)

On Error Resume Next

Set targetSheet = ThisWorkbook.Sheets("Список листов")

On Error GoTo 0

If targetSheet Is Nothing Then

Set targetSheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))

targetSheet.Name = "Список листов"

Else

targetSheet.Cells.Clear

End If

' Заголовок

targetSheet.Range("A1").Value = "Название листа"

targetSheet.Range("B1").Value = "Гиперссылка"

' Перебор всех листов

i = 2

For Each ws In ThisWorkbook.Worksheets

If ws.Name <> targetSheet.Name Then

targetSheet.Cells(i, 1).Value = ws.Name

targetSheet.Hyperlinks.Add _

Anchor:=targetSheet.Cells(i, 2), _

Address:="", _

SubAddress:="'" & ws.Name & "'!A1", _

TextToDisplay:="Перейти"

i = i + 1

End If

Next ws

' Форматирование

targetSheet.Columns("A:B").AutoFit

targetSheet.Rows(1).Font.Bold = True

End Sub

Шаг 3. Запустите макрос:

  • 📌 Нажмите F5 или кнопку Run в редакторе VBA.
  • 📌 Готово! На листе "Список листов" появится таблица с названиями и гиперссылками.

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

  • 🔹 Исключает сам лист со списком из результатов.
  • 🔹 Автоматически создает гиперссылки для быстрой навигации.
  • 🔹 Форматирует заголовки и подгоняет ширину столбцов.
⚠️ Внимание: При первом запуске макроса Excel может заблокировать его с предупреждением о безопасности. Разрешите выполнение макросов в Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Параметры макросов (выберите "Включить все макросы" или "Отключить все предупреждения...").

Включить поддержку макросов в настройках Excel|

Создать резервную копию книги|

Проверить наличие листа "Список листов" (будет перезаписан)|

Закрыть другие книги Excel (во избежание ошибок)

-->

5. Динамический список листов с помощью Power Query

Power Query — это инструмент Excel для импорта и преобразования данных, который также может извлекать метаданные книги, включая названия листов. Этот метод подходит для пользователей, работающих с Power BI или аналитикой данных.

Шаг 1. Перейдите на лист, где хотите создать список, и выберите: Данные → Получить данные → Из других источников → Пустая запрос.

Шаг 2. В редакторе Power Query введите в строку формул:

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

Шаг 3. Создайте параметр SheetNames:

  • 📌 Нажмите Управление параметрами → Создать параметр.
  • 📌 Задайте имя SheetNames.
  • 📌 В поле Тип выберите Любой.
  • 📌 В поле Значение введите:
    = Excel.Workbook(File.Contents(""), null, true)

Шаг 4. Разверните столбец Data, выбрав только Name (названия листов). Удалите ненужные столбцы и загрузите данные в Excel.

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

  • 🔄 Автоматически обновляется при изменении книги.
  • 🔄 Можно интегрировать с другими источниками данных.
  • 🔄 Подходит для сложных отчетов с несколькими книгами.

Минусы: Требует знания Power Query и не работает в веб-версии Excel.

Как обновить данные Power Query?

Чтобы обновить список листов после изменений в книге, нажмите Данные → Обновить все или используйте сочетание Alt + F5. Если запрос не обновляется, проверьте, не заблокированы ли внешние связи в параметрах безопасности Excel.

6. Продвинутая автоматизация: создание оглавления с гиперссылками

Если вам нужно не просто перечислить листы, а создать интерактивное оглавление, комбинируйте методы из предыдущих разделов. Например, с помощью VBA можно сгенерировать таблицу с:

  • 📌 Названиями листов.
  • 📌 Гиперссылками для перехода.
  • 📌 Дополнительными метриками (дата создания, количество строк и т.д.).

Пример расширенного макроса:

Sub ОглавлениеЛистов()

Dim ws As Worksheet, targetSheet As Worksheet

Dim i As Long, lastRow As Long

Dim sheetCount As Integer

' Создаем/очищаем лист для оглавления

On Error Resume Next

Set targetSheet = ThisWorkbook.Sheets("Оглавление")

On Error GoTo 0

If targetSheet Is Nothing Then

Set targetSheet = ThisWorkbook.Sheets.Add(Before:=ThisWorkbook.Sheets(1))

targetSheet.Name = "Оглавление"

Else

targetSheet.Cells.Clear

End If

' Заголовки

targetSheet.Range("A1:D1").Value = Array("№", "Название листа", "Кол-во строк", "Перейти")

targetSheet.Rows(1).Font.Bold = True

' Перебор листов

i = 2

sheetCount = 0

For Each ws In ThisWorkbook.Worksheets

If ws.Name <> targetSheet.Name Then

sheetCount = sheetCount + 1

targetSheet.Cells(i, 1).Value = sheetCount

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

targetSheet.Cells(i, 3).Value = ws.UsedRange.Rows.Count

' Гиперссылка

targetSheet.Hyperlinks.Add _

Anchor:=targetSheet.Cells(i, 4), _

Address:="", _

SubAddress:="'" & ws.Name & "'!A1", _

TextToDisplay:="Открыть"

i = i + 1

End If

Next ws

' Форматирование

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

targetSheet.Range("A1:D1").Interior.Color = RGB(200, 200, 200)

End Sub

🔹 Что добавляет этот макрос:

  • 📌 Нумерацию листов для удобства.
  • 📌 Подсчет строк на каждом листе (полезно для анализа объема данных).
  • 📌 Цветное оформление заголовков.

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

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

Критерий Ручной ввод Формулы (ДВССЫЛ) VBA Power Query
Скорость создания ⭐ (медленно) ⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐
Автообновление ❌ Нет ✅ Да ✅ (при повторном запуске) ✅ Да
Сложность ⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐
Гиперссылки ✅ (вручную) ❌ Нет ✅ Автоматически ❌ Нет
Поддержка версий Все Excel 2010+ Excel 2007+ Excel 2016+

🔹 Рекомендации:

  • 📌 Для одноразового использования и малого количества листов — ручной ввод.
  • 📌 Для динамических отчетов в Excel 365ПОЛУЧИТЬ.ДАННЫЕ.СВЯЗИ.
  • 📌 Для книг с 50+ листамиVBA.
  • 📌 Для интеграции с Power BIPower Query.

FAQ: Частые вопросы о работе со списками листов

Можно ли создать список листов в Google Sheets?

Да, но методы отличаются. В Google Sheets используйте функцию =ARRAYFORMULA(TO_TEXT(SORT(UNIQUE(IMPORTXML(CONCATENATE("file:///","dummy.xml"),"//*")))) или скрипт Apps Script:

function listSheets() {

const sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();

const names = sheets.map(sheet => [sheet.getName()]);

SpreadsheetApp.getActiveSheet().getRange(1, 1, names.length, 1).setValues(names);

}

Почему макрос VBA не видит некоторые листы?

Возможные причины:

  • 📌 Листы скрыты (используйте ws.Visible = xlSheetVisible в коде для их отображения).
  • 📌 Листы защищены паролем (макрос не может получить к ним доступ).
  • 📌 Листы являются диалоговыми (например, листы макросов в старых версиях Excel).

Чтобы обработать скрытые листы, модифицируйте цикл:

For Each ws In ThisWorkbook.Worksheets

If ws.Visible = xlSheetVisible Then

' Ваш код

End If

Next ws

Как исключить системные листы (например, "Лист1") из списка?

Добавьте в макрос или формулу условие на исключение. Пример для VBA:

If ws.Name <> targetSheet.Name And _

Left(ws.Name, 5) <> "Лист" And _

ws.Name <> "Data" Then

' Ваш код

End If

Для формул используйте ЕСЛИ с проверкой:

=ЕСЛИ(ЛЕВСИМВ(A1;5)="Лист";"";A1)
Можно ли экспортировать список листов в отдельный файл?

Да. Сначала создайте список любым из описанных методов, затем:

  1. Скопируйте данные с названиями листов.
  2. Создайте новую книгу (Ctrl + N).
  3. Вставьте данные (Ctrl + V).
  4. Сохраните файл как .xlsx или .csv.

Для автоматизации экспорта через VBA добавьте в макрос:

ThisWorkbook.Sheets("Список листов").Copy

ActiveWorkbook.SaveAs "C:\Temp\Список_листов.xlsx"

ActiveWorkbook.Close

Как обновить список листов после добавления новых вкладок?

Способ зависит от метода:

  • 📌 Формулы (ДВССЫЛ, ПОЛУЧИТЬ.ДАННЫЕ.СВЯЗИ) — обновляются автоматически.
  • 📌 VBA — запустите макрос повторно (Alt + F8).
  • 📌 Power Query — нажмите Данные → Обновить все.
  • 📌 Ручной ввод — добавьте новые листы вручную.