Работа с большими книгами Microsoft Excel часто требует навигации между десятками листов, и потерять обзор среди них проще, чем кажется. Представьте: вы получили файл с 50 вкладками, названными по проектам, месяцам или отделам. Как быстро сориентироваться, не листая их по одному? Или еще хуже — как автоматически собрать данные со всех листов, если вы даже не знаете их точных названий?
Список всех листов в Excel решает эти проблемы. Он позволяет не только визуализировать структуру книги, но и использовать его для динамических ссылок, сводных отчетов или даже автоматизации через макросы. В этой статье мы разберем 5 проверенных методов — от элементарных до продвинутых, — которые подойдут как новичкам, так и опытным пользователям. Вы узнаете, как создать такой список без программирования и как ускорить процесс с помощью VBA, если листов сотни.Важно: методы работают во всех актуальных версиях Excel 2016–2026 и Microsoft 365, включая веб-версию (с ограничениями). Для макросов потребуется включить поддержку VBA в настройках безопасности.
1. Ручной метод: копирование названий листов вручную
Самый простой, но самый трудоемкий способ — скопировать названия листов вручную. Он подходит, если в книге не больше 10–15 вкладок и вам нужно одноразовое решение.
Алгоритм действий:
- Создайте новый лист (нажмите
Shift + F11или кнопку+рядом с существующими вкладками). - Переименуйте его, например, в
"Список листов". - Переходите поочередно на каждый лист книги, фиксируйте его название и вводите в столбец
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 |
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 BI — Power 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)
Можно ли экспортировать список листов в отдельный файл?
Да. Сначала создайте список любым из описанных методов, затем:
- Скопируйте данные с названиями листов.
- Создайте новую книгу (
Ctrl + N). - Вставьте данные (
Ctrl + V). - Сохраните файл как
.xlsxили.csv.
Для автоматизации экспорта через VBA добавьте в макрос:
ThisWorkbook.Sheets("Список листов").Copy
ActiveWorkbook.SaveAs "C:\Temp\Список_листов.xlsx"
ActiveWorkbook.Close
Как обновить список листов после добавления новых вкладок?
Способ зависит от метода:
- 📌 Формулы (
ДВССЫЛ,ПОЛУЧИТЬ.ДАННЫЕ.СВЯЗИ) — обновляются автоматически. - 📌 VBA — запустите макрос повторно (
Alt + F8). - 📌 Power Query — нажмите
Данные → Обновить все. - 📌 Ручной ввод — добавьте новые листы вручную.