Как в Excel создать оглавление со всех листов: 5 проверенных способов

Работа с многолистовыми книгами в Microsoft Excel часто превращается в хаос: десятки вкладок с похожими названиями, потерянные данные и бесконечные клики Ctrl+PgUp/PgDn в поисках нужного раздела. Согласно исследованию Collaborative Work Management Report 2023, 68% пользователей тратят до 20 минут в день только на навигацию по файлам Excel — это 1,5 рабочих недели в год! Решение простое: автоматизированное оглавление, которое собирает ссылки на все листы в одном месте.

В этой статье вы найдёте 5 способов создать оглавление — от элементарных (подойдёт новичкам) до продвинутых с использованием Power Query и VBA. Мы разберём:

  • 🔹 Как сделать кликабельное оглавление без формул (метод "для ленивых")
  • 🔹 Автоматическое обновление списка листов при добавлении новых вкладок
  • 🔹 Скрытые возможности функции HYPERLINK для создания динамических ссылок
  • 🔹 Почему стандартный способ с Текст по столбцам ломается при 100+ листах

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

1. Способ "для ленивых": ручное оглавление за 3 минуты

Если в вашей книге менее 20 листов и они редко добавляются, этот метод сэкономит время без углубления в формулы. Подходит для одноразовых отчётов или презентаций.

Алгоритм:

  1. Создайте новый лист (назовите его, например, "Оглавление") и разместите в начале книги.
  2. В столбце A перечислите названия всех листов вручную.
  3. Выделите ячейки с названиями → нажмите Ctrl+K (или ⌘+K на Mac) → в поле Ссылка выберите соответствующий лист → нажмите OK.

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

  • ✅ Не требует знаний формул или VBA
  • ✅ Работает даже в защищённых файлах
  • ✅ Можно стилизовать оглавление (цвета, шрифты, иконки)
⚠️ Внимание: При переименовании или удалении листов ссылки в оглавлении не обновляются автоматически — их придётся править вручную. Этот метод не подходит для книг с часто меняющейся структурой.

Для книг с 20–100 листами оптимально использовать формулу HYPERLINK, которая автоматически обновляет ссылки при изменении названий вкладок. Этот метод требует минимальных знаний функций Excel, но экономит часы в перспективе.

Инструкция:

  1. На листе "Оглавление" в ячейке A1 введите:
    =HYPERLINK("#'"&B1&"'!A1"; B1)

    где B1 — ячейка с названием первого листа.

  2. В столбце B перечислите названия всех листов (можно скопировать из меню Правка → Перейти → Выбрать...).
  3. Растяните формулу из A1 на все строки с названиями.

Чтобы автоматизировать заполнение столбца B, используйте этот макрос (однократное выполнение):

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

Dim ws As Worksheet

Dim i As Integer

i = 1

For Each ws In ThisWorkbook.Worksheets

If ws.Name <> "Оглавление" Then

Sheets("Оглавление").Cells(i, 2).Value = ws.Name

i = i + 1

End If

Next ws

End Sub

Проблема Решение
Формула возвращает ошибку #ИМЯ? Проверьте регистр названий листов (должен совпадать с оригиналом)
Ссылки ведут не на начало листа Замените !A1 на нужную ячейку (например, !B3)
Не работают ссылки на листы с пробелами или спецсимволами Оберните название листа в формуле в одинарные кавычки: "#'"&B1&"'!A1"
📊 Как часто вы добавляете новые листы в свои книги Excel?
Ежедневно
Раз в неделю
Раз в месяц
Реже
Никогда

3. Автоматическое оглавление через Power Query (без VBA)

Power Query — самый надёжный способ для книг с 100+ листами или когда структура часто меняется. Этот метод создаёт оглавление, которое обновляется одним кликом (даже при добавлении/удалении вкладок).

Пошаговая инструкция:

  1. Перейдите на лист "Оглавление"Данные → Получить данные → Из других источников → Пустой запрос.
  2. В редакторе Power Query введите в строке формул:
    = Excel.CurrentWorkbook(){[Name="SheetNames"]}[Content]
  3. В меню Домой → Дополнительно → Редактор дополнительных параметров вставьте код:
    let
    

    Source = Excel.CurrentWorkbook(),

    Sheets = Table.SelectRows(Source, each ([Name] <> "Оглавление")),

    #"Renamed Columns" = Table.RenameColumns(Sheets,{{"Name", "SheetName"}}),

    #"Added Custom" = Table.AddColumn(#"Renamed Columns", "Hyperlink", each "[#'" & [SheetName] & "'!A1](" & [SheetName] & ")")

    in

    #"Added Custom"

  4. Нажмите Закрыть и загрузить → выберите Таблица → разместите на листе "Оглавление".

Теперь при изменении структуры книги достаточно нажать Данные → Обновить все, и оглавление обновляется автоматически.

Как убрать столбец с техническими данными?

В результатах Power Query отобразится лишний столбец с метаданными. Чтобы его скрыть:

1. Выделите столбец Content

2. Нажмите Домой → Удалить → Удалить столбцы

3. Сохраните и загрузите данные.

⚠️ Внимание: В Excel Online Power Query работает с ограничениями. Если вы используете веб-версию, проверьте совместимость заранее или выберите метод с HYPERLINK.

4. Оглавление с помощью VBA: для продвинутых пользователей

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

Скопируйте этот код в редактор VBA (Alt+F11Insert → Module):

Sub СоздатьОглавление()

Dim ws As Worksheet, wsTOC As Worksheet

Dim i As Long, LastRow As Long

Dim SheetNames() As String

ReDim SheetNames(1 To ThisWorkbook.Worksheets.Count - 1)

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

On Error Resume Next

Set wsTOC = ThisWorkbook.Worksheets("Оглавление")

If wsTOC Is Nothing Then

Set wsTOC = ThisWorkbook.Worksheets.Add(Before:=ThisWorkbook.Worksheets(1))

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

Else

wsTOC.Cells.Clear

End If

On Error GoTo 0

' Собираем названия листов (кроме "Оглавление")

i = 1

For Each ws In ThisWorkbook.Worksheets

If ws.Name <> "Оглавление" Then

SheetNames(i) = ws.Name

i = i + 1

End If

Next ws

' Сортируем листы по алфавиту

Call BubbleSort(SheetNames)

' Заполняем оглавление гиперссылками

For i = LBound(SheetNames) To UBound(SheetNames)

wsTOC.Hyperlinks.Add Anchor:=wsTOC.Cells(i, 1), _

Address:="", SubAddress:="'" & SheetNames(i) & "'!A1", _

TextToDisplay:=SheetNames(i)

Next i

' Форматируем оглавление

With wsTOC

.Columns(1).ColumnWidth = 30

.Range("A1").Value = "ОГЛАВЛЕНИЕ"

.Range("A1").Font.Bold = True

.Range("A1").Font.Size = 14

End With

End Sub

Sub BubbleSort(arr() As String)

Dim i As Long, j As Long

Dim temp As String

For i = LBound(arr) To UBound(arr) - 1

For j = i + 1 To UBound(arr)

If UCase(arr(i)) > UCase(arr(j)) Then

temp = arr(i)

arr(i) = arr(j)

arr(j) = temp

End If

Next j

Next i

End Sub

Особенности этого решения:

  • 🔹 Автоматически сортирует листы по алфавиту
  • 🔹 Игнорирует скрытые листы (добавьте условие If ws.Visible = xlSheetVisible Then)
  • 🔹 Можно модифицировать для добавления цветовых меток или иконок

1. Включите поддержку макросов в Файл → Параметры → Центр управления безопасностью → Параметры центра... → Включить все макросы

2. Сохраните файл как .xlsm (книга с поддержкой макросов)

3. Запустите макрос через Alt+F8 → СоздатьОглавление → Выполнить

4. При первом запуске разрешите выполнение макросов в всплывающем окне-->

5. Оглавление с дополнительной информацией (даты, авторы, статусы)

Если ваша книга используется командой, полезно добавить в оглавление метаданные: дату последнего изменения, автора или статус готовности листа. Это реализуется комбинацией VBA и пользовательских свойств листа.

Пример расширенного кода для оглавления с метаданными:

Sub ОглавлениеСМетаданными()

Dim ws As Worksheet, wsTOC As Worksheet

Dim i As Long, LastRow As Long

Dim SheetNames() As String, SheetAuthors() As String, SheetDates() As String

ReDim SheetNames(1 To ThisWorkbook.Worksheets.Count - 1)

ReDim SheetAuthors(1 To ThisWorkbook.Worksheets.Count - 1)

ReDim SheetDates(1 To ThisWorkbook.Worksheets.Count - 1)

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

On Error Resume Next

Set wsTOC = ThisWorkbook.Worksheets("Оглавление")

If wsTOC Is Nothing Then

Set wsTOC = ThisWorkbook.Worksheets.Add(Before:=ThisWorkbook.Worksheets(1))

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

Else

wsTOC.Cells.Clear

End If

On Error GoTo 0

' Собираем данные с листов

i = 1

For Each ws In ThisWorkbook.Worksheets

If ws.Name <> "Оглавление" Then

SheetNames(i) = ws.Name

SheetAuthors(i) = ws.Cells(1, 1).Comment.Text & "" ' Автор из примечания в A1

SheetDates(i) = Format(ws.Cells(2, 1).Value, "dd.mm.yyyy") ' Дата из A2

i = i + 1

End If

Next ws

' Заполняем оглавление

wsTOC.Range("A1:C1").Value = Array("НАЗВАНИЕ", "АВТОР", "ДАТА ИЗМЕНЕНИЯ")

For i = LBound(SheetNames) To UBound(SheetNames)

wsTOC.Cells(i + 1, 1).Value = SheetNames(i)

wsTOC.Cells(i + 1, 2).Value = SheetAuthors(i)

wsTOC.Cells(i + 1, 3).Value = SheetDates(i)

wsTOC.Hyperlinks.Add Anchor:=wsTOC.Cells(i + 1, 1), _

Address:="", SubAddress:="'" & SheetNames(i) & "'!A1", _

TextToDisplay:=SheetNames(i)

Next i

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

With wsTOC

.Range("A1:C1").Font.Bold = True

.Columns("A:C").AutoFit

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

End With

End Sub

Как подготовить листы для этого метода:

  1. На каждом листе в ячейке A1 добавьте примечание с именем автора (правый клик → Вставить примечание).
  2. В ячейке A2 укажите дату последнего изменения (можно использовать формулу =TODAY()).
  3. Запустите макрос — он соберёт все данные в оглавление.

6. Типичные ошибки и как их избежать

Даже опытные пользователи сталкиваются с проблемами при создании оглавлений. Вот TOP-5 ошибок и их решения:

Ошибка Причина Решение
Ссылки ведут на несуществующие листы Листы были переименованы или удалены Используйте динамические методы (Power Query или VBA)
Оглавление не обновляется Отключено автоматическое обновление связей Включите в Файл → Параметры → Формулы → Вычисления → Автоматически
Формулы возвращают #ЗНАЧ! Названия листов содержат запрещённые символы (? * : [ ] \ /) Переименуйте листы, используя только буквы, цифры и подчёркивания
Макрос не работает Отключена поддержка макросов или блокировка безопасности Сохраните файл как .xlsm и настройте доверительный доступ
Медленная работа книги Слишком много гиперссылок или сложных формул Оптимизируйте код или используйте Power Query для больших файлов

Критическая ошибка: Если в названии листа есть апостроф (например, О'Райли), все методы с формулами HYPERLINK сломаются. Решение — переименовать лист или использовать VBA с обработкой спецсимволов.

7. Альтернативные решения: надстройки и сторонние инструменты

Если стандартные методы Excel не подходят, рассмотрите специализированные инструменты:

  • 🔹 Kutools for Excel — платная надстройка с функцией Create List of Sheet Names, которая генерирует оглавление в 2 клика. Поддерживает экспорт в PDF с сохранением ссылок.
  • 🔹 Excel Table of Contents Generator — бесплатный макрос от Microsoft Tech Community, который создаёт оглавление с вложенной структурой (для книг с группировкой листов).
  • 🔹 Power BI + Excel — если ваша книга связана с Power BI, можно создать интерактивное оглавление через Power BI Service с фильтрацией по метаданным.

Сравнение инструментов:

Инструмент Стоимость Плюсы Минусы
Kutools $39/год Интуитивный интерфейс, поддержка больших файлов Платный, требует установки
Excel TOC Generator (макрос) Бесплатно Гибкая настройка, работает офлайн Требует знаний VBA для модификации
Power Query Бесплатно Встроен в Excel, обновляется автоматически Сложно настроить для новичков

Для корпоративных пользователей рекомендуем Kutools — он интегрируется с Office 365 и поддерживает совместную работу. Для личного использования достаточно Power Query или VBA.

FAQ: Частые вопросы по оглавлениям в Excel

Можно ли сделать оглавление с вложенной структурой (как в Word)?

Да, но только с помощью VBA.Standardные методы Excel не поддерживают многоуровневые оглавления. Пример кода для двух уровней:

Sub ВложенноеОглавление()

' Код для создания оглавления с группировкой листов по префиксам

' Например, листы "Бюджет_2026", "Бюджет_2026" будут сгруппированы под заголовком "Бюджет"

End Sub

Для автоматизации потребуется разработать логику группировки (по префиксам, цветам вкладок и т.д.).

Как сделать оглавление, которое обновляется при открытии файла?

Используйте этот макрос в событии Workbook_Open:

Private Sub Workbook_Open()

Call СоздатьОглавление ' Вызов вашей функции из предыдущих примеров

End Sub

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

  1. Откройте редактор VBA (Alt+F11).
  2. Дважды кликните на ThisWorkbook в дереве проекта.
  3. Вставьте код выше.
  4. Сохраните файл как .xlsm.

⚠️ При первом открытии файла Excel может заблокировать макросы — разрешите их выполнение.

Почему гиперссылки в оглавлении не работают после сохранения файла?

Это типичная проблема при:

  • Сохранении файла в формате .xlsx (не поддерживает макросы). Решение: сохраняйте как .xlsm.
  • Использовании относительных ссылок в формулах. Решение: замените #'Лист1'!A1 на полный путь [Книга.xlsx]Лист1!A1.
  • Работе с файлом в Excel Online — некоторые функции гиперссылок ограничены.
Как экспортировать оглавление в Word или PDF с сохранением ссылок?

Стандартный экспорт в PDF сохраняет гиперссылки, но они ведут на страницы документа, а не на листы Excel. Чтобы экспортировать рабочее оглавление:

  1. Скопируйте оглавление из Excel в Word (Ctrl+C → Ctrl+V).
  2. В Word нажмите Ctrl+A (выделить всё) → Ctrl+Shift+F9 (разорвать связи).
  3. Заново создайте гиперссылки через Вставка → Ссылка → Гиперссылка, указав пути к листам Excel.

Для автоматизации используйте Kutools или макрос:

Sub ЭкспортВPDF()

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="Оглавление.pdf", _

Quality:=xlQualityStandard, IncludeDocProperties:=True, _

IgnorePrintAreas:=False, OpenAfterPublish:=True

End Sub

Можно ли сделать оглавление только для видимых листов?

Да, модифицируйте VBA-код, добавив проверку видимости:

If ws.Visible = xlSheetVisible And ws.Name <> "Оглавление" Then

' Ваш код для добавления листа в оглавление

End If

Для Power Query используйте фильтр в редакторе:

= Table.SelectRows(Source, each ([Name] <> "Оглавление" and [Visible] = true))