Работа с несколькими листами в Microsoft Excel часто требует быстрого доступа к их названиям. Например, когда нужно создать оглавление, автоматизировать отчёты или просто ориентироваться в большой книге с десятками вкладок. Вручную переписывать имена листов — неэффективно, особенно если они часто меняются. К счастью, есть несколько способов динамически добавить строку со списком всех листов — от простых формул до макросов VBA.
В этой статье вы найдёте актуальные методы для Excel 2010–2026 и Office 365, включая решения без программирования и автоматизированные скрипты. Мы разберём плюсы и минусы каждого подхода, а также покажем, как обновить список при добавлении новых листов. Если вы никогда не работали с VBA — не переживайте: первые два способа не требуют знания кода.
Для начала определите, какой результат вам нужен:
- 📋 Статический список — названия листов вставляются один раз и не обновляются автоматически.
- 🔄 Динамический список — имена листов обновляются при их добавлении/удалении.
- 📊 Список с гиперссылками — кликабельные названия для быстрого перехода.
Способ 1: Ручной ввод через окно «Перейти» (без формул)
Самый простой метод — скопировать имена листов из встроенного диалогового окна Excel. Он подходит для одноразового создания списка и не требует знания формул или макросов.
Откройте вашу книгу и выполните следующие шаги:
- Нажмите клавиши
F5или перейдите вГлавная → Найти и выделить → Перейти(илиCtrl + G). - В открывшемся окне кликните кнопку «Выделить» (в некоторых версиях — «Выбрать»).
- Выберите опцию «Листы» и нажмите
ОК.
В левой части окна появится список всех листов книги. Теперь его можно скопировать:
- 🖱️ Выделите мышью все названия листов в окне (они отображаются в столбик).
- 📋 Нажмите
Ctrl + Cдля копирования. - 📄 Вставьте (
Ctrl + V) данные в нужную ячейку на любом листе.
Ограничения метода:
- ❌ Список не обновляется автоматически при добавлении/удалении листов.
- ❌ Имена листов вставляются в один столбец (придётся транпоновать в строку вручную).
- ✅ Подходит для всех версий Excel, включая Excel для Mac.
Способ 2: Формула массива для динамического списка (Excel 365/2021)
Если вы используете Excel 365 или Excel 2021, у вас есть доступ к современным динамическим формулам массива. Они позволяют создать список листов, который будет обновляться автоматически.
Введите в ячейку (например, A1) следующую формулу:
=TEXTJOIN(", "; ИСТИНА; MID(FORMULATEXT(GET.WORKBOOK(1)); FIND("]", FORMULATEXT(GET.WORKBOOK(1))) + 1; 31))
Как это работает:
- 🔹
GET.WORKBOOK(1)— скрытая функция Excel, возвращающая массив с метаданными книги, включая имена листов. - 🔹
FIND("]"; ...)— находит позицию закрывающей скобки в строке с данными листа. - 🔹
TEXTJOIN— объединяет все найденные имена через запятую.
Если формула возвращает ошибку:
- 🔄 Убедитесь, что вы ввели её в английской раскладке (даже в русифицированном Excel).
- 📌 В Excel 2019 и старше эта формула не работает — используйте
VBA(способ 4).
Почему формула не работает в Excel 2016?
Функция GET.WORKBOOK(1) была добавлена в Excel 365 как часть динамических массивов. В более старых версиях её нет, поэтому для Excel 2010–2019 требуется макрос.
Способ 3: Power Query для автоматизированного списка
Power Query — мощный инструмент Excel для импорта и преобразования данных. С его помощью можно создать динамический список листов, который будет обновляться при изменении книги.
Инструкция по шагам:
- Перейдите на вкладку
Данные→Получить данные→Из других источников→Пустой запрос. - В открывшемся редакторе Power Query введите в строку формул:
= Excel.CurrentWorkbook() - Нажмите
Главная→Дополнительно→Добавить столбец→Настраиваемый столбец. - Введите имя столбца (например, «Имена листов») и формулу:
= Excel.Workbook([Content]{0}[Name]) - Удалите все столбцы, кроме нового, и нажмите
Главная→Закрыть и загрузить.
Преимущества метода:
- ✅ Список обновляется при добавлении/удалении листов (нужно нажать
Обновить все). - ✅ Работает в Excel 2016 и новее.
- ✅ Можно добавить фильтрацию (например, исключить служебные листы).
Недостатки:
- ⚠️ Требует базовых знаний Power Query.
- ⚠️ Не работает в Excel для Mac (ограниченная поддержка Power Query).
☑️ Подготовка к работе с Power Query
Способ 4: Макрос VBA для универсального решения
Если вам нужен наиболее надёжный и гибкий способ, используйте макрос на VBA. Он работает во всех версиях Excel (включая Excel 2010 и Excel для Mac с поддержкой макросов) и позволяет настраивать формат вывода.
Откройте редактор VBA (Alt + F11) и вставьте следующий код в модуль:
Sub ListSheets()
Dim ws As Worksheet
Dim i As Integer
Dim outputRow As Integer
Dim outputSheet As Worksheet
' Лист, куда будет выведен список (измените "Лист1" на нужное имя)
Set outputSheet = ThisWorkbook.Sheets("Лист1")
outputRow = 1 ' Строка, с которой начнётся вывод
' Очистка предыдущих данных (опционально)
outputSheet.Range("A:A").ClearContents
' Перебор всех листов
For Each ws In ThisWorkbook.Worksheets
outputSheet.Cells(outputRow, 1).Value = ws.Name
' Добавляем гиперссылку для быстрого перехода (опционально)
outputSheet.Hyperlinks.Add Anchor:=outputSheet.Cells(outputRow, 1), _
Address:="", SubAddress:="'" & ws.Name & "'!A1", _
TextToDisplay:=ws.Name
outputRow = outputRow + 1
Next ws
End Sub
Как запустить макрос:
- Сохраните книгу в формате
.xlsm(с поддержкой макросов). - Нажмите
Alt + F8, выберите макросListSheetsи кликните «Выполнить». - Список листов появится на листе
Лист1(измените имя в коде при необходимости).
Дополнительные настройки:
| Параметр | Описание | Пример изменения |
|---|---|---|
outputSheet |
Лист для вывода списка | Set outputSheet = ThisWorkbook.Sheets("Оглавление") |
outputRow |
Начальная строка вывода | outputRow = 5 (начнёт с 5-й строки) |
SubAddress |
Ячейка для перехода по гиперссылке | SubAddress:="'" & ws.Name & "'!B2" |
TextToDisplay |
Текст гиперссылки | TextToDisplay:="📄 " & ws.Name |
Способ 5: Функция пользователя (UDF) для формульного подхода
Если вы не хотите запускать макрос вручную, но нуждаетесь в динамическом списке, создайте пользовательскую функцию (UDF). Она будет работать как обычная формула Excel.
Откройте редактор VBA (Alt + F11) и вставьте в модуль следующий код:
Function SheetNames(Optional Separator As String = ", ") As String
Dim ws As Worksheet
Dim result As String
For Each ws In ThisWorkbook.Worksheets
result = result & Separator & ws.Name
Next ws
' Удаляем первый разделитель
If Len(result) > 0 Then result = Mid(result, Len(Separator) + 1)
SheetNames = result
End Function
Теперь вы можете использовать эту функцию в любой ячейке, как обычную формулу:
- 📌 Для вывода через запятую:
=SheetNames() - 📌 Для вывода через точку с запятой:
=SheetNames("; ") - 📌 Для вывода в столбец: используйте
=TRANSPOSE(SPLIT(SheetNames("|"); "|"))(в Excel 365).
Важно:
⚠️ Внимание: Пользовательские функции (UDF) не обновляются автоматически при добавлении/удалении листов. Чтобы обновить список, нажмите F9 (пересчёт формул) или измените любую ячейку на листе.
Сравнение методов: какой выбрать?
Каждый из описанных способов имеет свои плюсы и минусы. Выбор зависит от вашей версии Excel, необходимости автоматического обновления и уровня владения инструментами.
| Метод | Автообновление | Требует VBA | Работает в Excel 2010–2016 | Гиперссылки | Сложность |
|---|---|---|---|---|---|
| Ручной ввод (F5) | ❌ Нет | ❌ Нет | ✅ Да | ❌ Нет | ⭐ Очень просто |
| Формула массива | ✅ Да | ❌ Нет | ❌ Только 365/2021 | ❌ Нет | ⭐⭐ Средне |
| Power Query | ✅ Да (вручную) | ❌ Нет | ✅ Да | ❌ Нет | ⭐⭐⭐ Сложно |
| Макрос VBA | ❌ Нет (только при запуске) | ✅ Да | ✅ Да | ✅ Да | ⭐⭐ Средне |
| UDF (пользовательская функция) | ❌ Нет (требует F9) | ✅ Да | ✅ Да | ❌ Нет | ⭐⭐ Средне |
Рекомендации:
- 🔹 Для разового использования подойдёт ручной ввод (способ 1).
- 🔹 Для Excel 365/2021 оптимальна формула массива (способ 2).
- 🔹 Если нужны гиперссылки или работа в Excel 2010–2019, используйте макрос VBA (способ 4).
- 🔹 Для автоматизированных отчётов лучший выбор — Power Query (способ 3).
Частые ошибки и их решения
При работе со списками листов пользователи часто сталкиваются с типичными проблемами. Вот как их избежать или исправить:
1. Формула возвращает #ИМЯ? или #VALUE!
- 🔹 Причина: Опечатка в имени функции или неверная раскладка клавиатуры.
- 🔹 Решение: Убедитесь, что формула введена в английской раскладке (даже если ваш Excel русифицирован). Например,
TEXTJOIN, а неТЕКСТСЦЕПИТЬ.
2. Макрос не запускается
- 🔹 Причина 1: Книга сохранена в формате
.xlsx(без поддержки макросов). - 🔹 Решение: Сохраните файл как
.xlsm(Файл → Сохранить как → Тип файла: Книга Excel с поддержкой макросов). - 🔹 Причина 2: Отключены макросы в настройках безопасности.
- 🔹 Решение: Перейдите в
Файл → Параметры → Центр управления безопасностью → Параметры центра → Параметры макросови выберите «Включить все макросы» (не рекомендуется для недоверенных файлов).
3. Power Query не показывает все листы
- 🔹 Причина: Некоторые листы могут быть скрыты или защищены.
- 🔹 Решение: Перед загрузкой данных убедитесь, что все нужные листы видимы (
Главная → Формат → Отобразить) и не защищены.
4. Список не обновляется автоматически
⚠️ Внимание: Ни один из методов (кроме Power Query с ручным обновлением) не обновляет список в реальном времени. Если структура книги часто меняется, используйте макрос с триггером (например, по открытию файла) или кнопку для запуска обновления.
Чтобы добавить кнопку для обновления списка:
- Перейдите на вкладку
Разработчик(если её нет, включите вФайл → Параметры → Настройка ленты). - Нажмите
Вставить → Кнопка (элемент управления формы). - Нарисуйте кнопку на листе и присвойте ей макрос
ListSheets.
FAQ: Ответы на популярные вопросы
Можно ли создать список листов с гиперссылками без VBA?
Да, но с ограничениями. В Excel 365 можно использовать комбинацию функций HYPERLINK и TEXTJOIN, но для этого потребуется сначала получить список имён листов через Power Query или ручной ввод. Пример формулы для гиперссылки:
=HYPERLINK("#'" & A1 & "'!A1"; A1)
где A1 — ячейка с именем листа.
Почему в списке отображаются скрытые листы?
По умолчанию большинство методов (включая VBA и Power Query) показывают все листы, даже скрытые. Чтобы их исключить, модифицируйте код макроса:
If ws.Visible = xlSheetVisible Then
' Добавление видимого листа в список
End If
В Power Query скрытые листы можно отфильтровать после загрузки данных.
Как обновить список листов при добавлении нового листа?
Способы обновления зависят от метода:
- 🔹 Ручной ввод: Повторите процедуру копирования.
- 🔹 Формула массива: Нажмите
F9или измените любую ячейку на листе. - 🔹 Power Query: Нажмите
Данные → Обновить все. - 🔹 VBA: Запустите макрос повторно (или настройте автоматический запуск по событию, например,
Workbook_SheetChange).
Можно ли экспортировать список листов в отдельный файл?
Да. Самый простой способ — скопировать список (полученный любым из методов) и вставить в новую книгу. Для автоматизации экспорта используйте VBA:
Sub ExportSheetList()
Dim newWorkbook As Workbook
Set newWorkbook = Workbooks.Add
Dim i As Integer
For Each ws In ThisWorkbook.Worksheets
newWorkbook.Sheets(1).Cells(i + 1, 1).Value = ws.Name
i = i + 1
Next ws
newWorkbook.SaveAs "Список_листов.xlsx"
End Sub
Почему в Excel для Mac не работает макрос?
В Excel для Mac поддержка VBA ограничена, особенно в старых версиях. Проверьте:
- 🔹 Версию Excel (в Excel 2016 для Mac и новее
VBAработает стабильно). - 🔹 Настройки безопасности (
Excel → Preferences → Security → Enable Macros). - 🔹 Формат файла (должен быть
.xlsm).
Если макросы не поддерживаются, используйте Power Query или ручной ввод.