Excel макрос список всех листов

На чтение 5 мин Опубликовано 26.01.2021

Листам в книгах Excel можно дать имена, соответствующие содержимому. Из них было бы удобно составить оглавление, но не все знают, как это сделать. Существуют несложные способы сформировать список листов и методы, требующие усилий, например установки сторонних дополнений. С помощью инструментов Excel пользователи также могут подсчитать количество листов в крупной книге. Выясним, как получить оглавление для чтения или перехода к каждому листу, какими формулами для этого нужно воспользоваться.

Содержание

  1. Список листов с помощью формулы
  2. Как составить список листов через VBA
  3. Надстройки для составления списка листов
  4. Как подсчитать количество листов в книге

Список листов с помощью формулы

Этот способ основан на использовании функции, которую нельзя найти в Менеджере. Она связана с макросами Excel 4.0. Чтобы применить формулу на практике, необходимо пройти дополнительный шаг, редко встречающийся в работе с функциями – зайти в диспетчер имен и добавить туда выражение.

  1. Переходим на вкладку «Формулы» и кликаем по кнопке «Диспетчер имен». Опция находится в разделе «Определенные имена».

Как получить список листов книги Excel

  1. Нажимаем «Создать» в открывшемся диалоговом окне.

Как получить список листов книги Excel

  1. Записываем новое имя в верхнем поле, выбираем область «Книга» (обычно она установлена по умолчанию) и записываем в графу «Диапазон» эту формулу: =ЗАМЕНИТЬ(ПОЛУЧИТЬ.РАБОЧУЮ.КНИГУ(1);1; НАЙТИ(«]»;ПОЛУЧИТЬ.РАБОЧУЮ.КНИГУ(1));»»)
  2. После заполнения всех полей жмем «ОК». В книге Excel пока ничего не изменится, но эти шаги помогут в будущем. Окно диспетчера имен можно закрыть.

Как получить список листов книги Excel

  1. Открываем лист, где будет расположен список. Выбираем ячейку и записываем в ней формулу с только что созданным именем: =ИНДЕКС(Список_листов;СТРОКА()). Нажмите Enter, и в ячейке появится название первого листа.

Как получить список листов книги Excel

  1. Необходимо вывести все названия листов в столбец. Для этого зажимаем маркер заполнения, который находится в правом нижнем углу выбранной ячейки, и выделяем нужное количество ячеек. В таблице-примере 4 листа столько и было выделено ячеек.

Как получить список листов книги Excel

  1. Создадим список, из которого можно перейти на каждый лист. Выберите другую пустую ячейку и вставьте эту формулу: =ГИПЕРССЫЛКА(«#»&A1&»!A1″;»»&A1).

Обратите внимание! Ячейка A1 прописывается в формуле, чтобы пользователи могли перейти на конкретную ячейку каждого листа. После нажатия Enter появится кликабельное название листа.

Как получить список листов книги Excel

  1. Полный список с гиперссылками можно создать так же, с помощью маркера заполнения.
  2. Если название листа изменено, придется перезаполнить списки – для этого нужно просто удалить их, снова вставить те же формулы и выделить ячейки ниже.

Важно! Невозможно сделать ссылку на лист с диаграммой в Excel. На экране появляется сообщение об ошибке, переход не происходит.

Как составить список листов через VBA

Существует другой способ составления списка листов из книги – можно подключить пользовательскую функцию через редактор Visual Basic. Такой метод может показаться сложным, но это не так, если воспользоваться шаблоном для добавления функции в программу.

  1. Открываем VBA с помощью комбинации клавиш «Alt+F11». Если при нажатии F11 снижается яркость или срабатывает другая функция, установленная на эту кнопку, зажмите клавишу Fn.
  2. Нажмите «Вставить» (Insert) на верхней панели и выберите в открывшемся меню пункт «Модуль» (Module).

Как получить список листов книги Excel

  1. Вставляем в свободное поле этот текст:

Function SheetList(N As Integer)

SheetList = ActiveWorkbook.Worksheets(N).Name

End Function

  1. Далее можно закрыть окно Visual Basic, потому что этот инструмент больше не понадобится, а функция уже добавлена в программу.

Как получить список листов книги Excel

  1. Открываем лист для списка и вводим формулу в начальную ячейку. Теперь не нужно длинное выражение, чтобы создать список листов. Новая формула выглядит так: =SheetList(СТРОКА()).
  2. Нажимаем Enter и получаем название листа в ячейке. Маркером заполнения создаем список.

Как получить список листов книги Excel

  1. Для гиперссылок придется использовать ту же длинную формулу: =ГИПЕРССЫЛКА(«#»&A1&»!A1″;»»&A1).

Надстройки для составления списка листов

Надстройки – это дополнения для Microsoft Excel, которые создаются продвинутыми пользователями. Компания Microsoft рассказывает на официальном сайте о возможности подключить надстройки, но не предлагает скачать дополнения, поэтому обычно их загружают из других источников.

Всегда проверяйте загрузки на вредоносные элементы с помощью антивирусной программы.

Существуют платные и бесплатные надстройки. Сегодня рассмотрим набор дополнений для Excel 2007-2019 под названием «Ёxcel». Разработчик распространяет файл на своем сайте за добровольное пожертвование. Установите надстройку по инструкции – после этого можно приступать к составлению списка.

  1. Открываем лист, где будет размещен список, и нажимаем левой кнопкой мыши на начальную ячейку будущего перечисления.
  2. На вкладке надстройки находим кнопку «Листы». Кликаем по ней, чтобы открылось меню, и выбираем пункт «Получить список листов книги». Скриншот создателя надстройки:

Как получить список листов книги Excel

  1. Выбираем, какие листы показать в списке. Для простейшего перечисления названий листов кликаем по пункту «Простой список» и жмем на кнопку с галочкой в левом нижнем углу диалогового окна.
  2. На экране появится список листов. Если выставить настройки сложнее, то внешний вид списка немного изменится.

Как подсчитать количество листов в книге

Иногда в книгах Excel появляется много листов, например если документ относится к крупному проекту. Выяснить, сколько в файле страниц, можно с помощью функции ЛИСТЫ.

Обратите внимание! Функция работает только в версиях Microsoft Excel от 2013.

  1. Выбираем пустую ячейку и записываем в ней формулу: =ЛИСТЫ(). Не обязательно заполнять аргумент «Ссылка», если нужно посчитать листы в одной книге.
  1. Жмем Enter и получаем числовое значение.

Как получить список листов книги Excel

Если все листы переименованы, и нужно узнать их номера, воспользуйтесь функцией ЛИСТ. Эта формула также доступна с 2013-й версии. У функции ЛИСТ один аргумент – «Значение». Если аргумент не заполнен, после нажатия клавиши Enter в ячейке появится номер того же листа, где была введена формула. Простое выражение с ЛИСТ выглядит так: =ЛИСТ().

Оцените качество статьи. Нам важно ваше мнение:

Странно, но в Excel невозможно напрямую сгенерировать список имен листов из книги. В этой статье будет рассказано, как создать список всех листов, содержащихся в книге. Как и в предыдущей статье, здесь мы будем использовать макрофункцию из Excel 4 XLM в именованной формуле.

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

  1. Вставьте новый лист, на котором будет находиться список.
  2. Выполните команду Формулы ► Присвоить имя, чтобы открыть диалоговое окно Создание имени.
  3. Впишите в поле Имя название Список.
  4. Введите следующую формулу в поле Диапазон (рис. 9.1): =ЗАМЕНИТЬ(ПОЛУЧИТЬ.РАБОЧУЮ.КНИГУ(1);1;НАЙТИ("]";ПОЛУЧИТЬ.РАБОЧУЮ.КНИГУ(1));"").
  5. Осталось нажать ОК, чтобы закрыть диалоговое окно Создание имени.

http://www.kids.ua/

Рис. 9.1. Работа с окном Создание имени для создания именованной формулы

Обратите внимание: в формуле используется функция ПОЛУЧИТЬ.РАБОЧУЮ.КНИГУ, которая не относится к числу стандартных функций рабочего листа. Это макрофункция, написанная в сравнительно старом XLM-стиле и предназначенная для применения на специальном листе макросов. При использовании аргумента 1 она возвращает массив имен листов, причем перед именем каждого листа указано название книги, откуда он взят. Функции ЗАМЕНИТЬ и НАЙТИ удаляют имя книги, сопутствующее названию листа. Чтобы сгенерировать имена листов, введите в ячейку А1 следующую формулу, а затем скопируйте ее ниже по столбцу: =ИНДЕКС(Список;СТРОКА()).

На рис. 9.2 приведена данная формула для диапазона А1:А10. В книге семь листов, поэтому формула возвращает ошибку #ССЫЛКА! при попытке отобразить имя несуществующего листа. Чтобы избежать этого, измените формулу следующим образом: =ЕСЛИОШИБКА(ИНДЕКС(Список;СТРОКА());"").

Рис. 9.2. Использование формулы для отображения списка имен листов

Рис. 9.2. Использование формулы для отображения списка имен листов

Список названий листов можно откорректировать, если вы будете добавлять, удалять или переименовывать листы, но это не происходит автоматически. Чтобы принудительно обновить формулы, нажмите Ctrl+Alt+F9. Если вы хотите, чтобы имена листов автоматически обновлялись при пересчете книги, измените именованную формулу следующим образом, чтобы сделать ее меняющейся: =ЗАМЕНИТЬ(ПОЛУЧИТЬ.РАБОЧУЮ.КНИГУ(1);1;НАЙТИ("]";ПОЛУЧИТЬ.РАБОЧУЮ.КНИГУ(1));"")&Т(ТДАТА()).

Рис. 9.3. Создание списка гиперссылок

Рис. 9.3. Создание списка гиперссылок

Зачем может понадобиться список названий листов? На рис. 9.3 показано оглавление, созданное с помощью ссылки ГИПЕРССЫЛКА. В ячейке В1 записана следующая формула: =ГИПЕРССЫЛКА("#"&A1&"!A1";"Перейти по ссылке"). Щелкнув на гиперссылке, вы активизируете лист и выделяете ячейку А1. К сожалению, Excel не поддерживает гиперссылок, ведущих на лист с диаграммами, поэтому при попытке сослаться на такой лист программа выдаст ошибку.

Если вы пользуетесь такими приемами, то книгу нужно сохранить как файл с поддержкой макросов (в формате *.xlsm или *.xls).

 

Ole_123

Пользователь

Сообщений: 58
Регистрация: 10.07.2019

#1

10.12.2019 20:01:31

Здравствуйте. Создал макрос который в столбец помещает все листы в екселе. Но я не могу в нужную ячейку вставить этот список. Если я меняю Cells(i,2) Cells(9,2) — выдает только 4 лист книги (всего в книге 4 листа). Как сделать чтобы списком было все листы?

Код
Sub List()

Sheets("Task 3 (VBA)").Select
Range("Table1[Names of tabs in this file]").Select

Dim i As Integer
For i = 1 To ActiveWorkbook.Worksheets.Count
ActiveSheet.Cells(9, 2).Value = ActiveWorkbook.Worksheets(i).Name
Next i
End Sub
 

bigorq

Пользователь

Сообщений: 782
Регистрация: 26.04.2018

#2

10.12.2019 20:24:10

Так

Код
Cells(i, 2)

 должна вывести все листы в столбик. Вот правда ActiveSheet перед ним меня смущает. Но я не знаток VBA

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

Почитайте в  «Приемах» эту

статью

 

Alec Perle

Пользователь

Сообщений: 172
Регистрация: 13.07.2018

#4

10.12.2019 21:56:17

Не вдаваясь в моменты использования Select и ActiveSheet — приведенная процедура выводит имена всех рабочих листов, как и предполагается. Но выводит их в одну и ту же ячейку, поэтому и остается в результате только имя последнего листа.
Что Вы хотите получить? Имена книг в разных ячейках или в одной? Как раз не хватает примера того, что необходимо получить.
Судя по замене Cells(i,2) на Cells(9,2) (видимо у Вас в вопросе «на» пропущено) — в одной ячейке. Тогда:

Код
Sub List()
 
Sheets("Task 3 (VBA)").Select
Range("Table1[Names of tabs in this file]").Select
 
Dim i As Integer
For i = 1 To ActiveWorkbook.Worksheets.Count
  If i>1 Then ActiveSheet.Cells(9, 2).Value = ActiveSheet.Cells(9, 2).Value & vbCr 'Добавляем символ переноса строк
  ActiveSheet.Cells(9, 2).Value = ActiveSheet.Cells(9, 2).Value & ActiveWorkbook.Worksheets(i).Name
Next i
End Sub

Если это так, то название темы надо поправить. «Список имен рабочих листов книги в одной ячейке с помощью макроса»

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

#5

10.12.2019 22:11:45

Цитата
Alec Perle написал:
Что Вы хотите получить? Имена книг в разных ячейках…
Цитата
Ole_123 написал:
Список листов книги

:)  

 

Ole_123

Пользователь

Сообщений: 58
Регистрация: 10.07.2019

Alec Perle,да, но можно чтобы этот перечень в столбец был а не в 1 ячейке?

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

Ole_123, по ссылке статью читали?

 

Ole_123

Пользователь

Сообщений: 58
Регистрация: 10.07.2019

Юрий М,конечно, но у меня немного не то. У меня Лист 3-й по счету + мне не сверху листа нужно вставить список а в Cells(9,2).

 

bigorq

Пользователь

Сообщений: 782
Регистрация: 26.04.2018

#9

10.12.2019 23:33:39

Цитата
Ole_123 написал:
чтобы этот перечень в столбец был а не в 1 ячейке?
Цитата
Ole_123 написал:
вставить список а в Cells(9,2).

Определитесь, чего Вы хотите

 

Ігор Гончаренко

Пользователь

Сообщений: 13746
Регистрация: 01.01.1970

#10

10.12.2019 23:34:34

Цитата
Ole_123 написал:
У меня Лист 3-й по счету + мне не сверху листа нужно вставить список а в Cells(9,2)

воспользуйтесь услугами программиста)

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Ole_123

Пользователь

Сообщений: 58
Регистрация: 10.07.2019

Ігор Гончаренко,прикрепляю пустой пример) На третем листе выделил куда должен попадать список. В коде выше все попадает в 1 строчку, а нужно чтобы столбцом.
Подскажите плз

Прикрепленные файлы

  • Book1.xlsx (10.34 КБ)

 

bigorq

Пользователь

Сообщений: 782
Регистрация: 26.04.2018

а если в коде vbCr заменить на chr(10) ? Будет как Вы хотите?

Изменено: bigorq10.12.2019 23:43:19

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

#13

10.12.2019 23:45:39

Ну так сделайте минимальную доработку:

Код
Sub SheetList()
   Dim sheet As Worksheet
   Dim cell As Range, x As Long
   x = 9
   With ActiveWorkbook
      For Each sheet In ActiveWorkbook.Worksheets
         Set cell = Worksheets(3).Cells(x, 2)
         .Worksheets(1).Hyperlinks.Add anchor:=cell, Address:="", SubAddress:="'" & sheet.Name & "'" & "!A1"
         cell.Formula = sheet.Name
         x = x + 1
      Next
   End With
End Sub

 

Ole_123

Пользователь

Сообщений: 58
Регистрация: 10.07.2019

bigorq,не совсем. Выйдет что все названия листов в 1 ячейке столбцом. А нужно в разных ячейках названия (столбцом)

 

))
совсем на форуме экстрасенсы перевелись, элементарных вещей угадать не могут!

Изменено: Ігор Гончаренко10.12.2019 23:49:37

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

bigorq

Пользователь

Сообщений: 782
Регистрация: 26.04.2018

#16

10.12.2019 23:49:08

Цитата
Ole_123 написал:
А нужно в разных ячейках названия

Так а чем Вас первоначальный вариант не устраивает? Замените в Cells 9 на i+8

 

Ole_123

Пользователь

Сообщений: 58
Регистрация: 10.07.2019

#17

10.12.2019 23:52:23

bigorq,получилось, спасибо!!!!)

Студворк — интернет-сервис помощи студентам

В файле много листов. Имена у листов меняются.
У листы делятся на группы. Каждая группа выполняет свою функцию.
Всё это не принципиально, но делает понятней задачу.

Нужно получить все имена листов в массив, из которого нужно выбрать только имена определенной группы листов.

например, есть листы «Лист 1», «Лист 2», «Лист 3», «RfЛист», «Rfkbcn 2», «Rf запрос»
нужно выбрать только имена листов, начинающиеся с «Rf» поместить их в комбобокс

Добавлено через 16 минут
В массив можно не выбирать наверное.
Я вот что наваял

Visual Basic
1
2
3
4
5
6
7
8
Private Sub UserForm_Activate()
        Dim sh As Worksheet
        For Each sh In ActiveWorkbook.Worksheets
            If Left(sh.Name, 2) = "Rf" Then
               Me.ComboBox9.AddItem sh.Name
            End If
        Next
End Sub

Аннотация

Данная статья содержит Microsoft Visual Basic для приложений макроса (процедура Sub), который в цикле проходит через все листы активной книги. Этот макрос также отображается имя каждого листа.

Дополнительная информация

Корпорация Майкрософт предлагает примеры программного кода только для иллюстрации и без гарантии или подразумеваемых. Это включает, но не ограничиваясь, подразумеваемые гарантии товарной пригодности или пригодности для определенной цели. В данной статье предполагается, что вы знакомы с демонстрируемым языком программирования и средствами, которые используются для создания и отладки. Сотрудники службы поддержки Майкрософт могут объяснить возможности конкретной процедуры, но не выполнять модификации примеров для обеспечения дополнительных функциональных возможностей или создания процедур для определенных требований. Пример макроса, выполните следующие действия:

  1. Введите следующий код макроса в лист модуля.

          Sub WorksheetLoop()         Dim WS_Count As Integer         Dim I As Integer         ' Set WS_Count equal to the number of worksheets in the active         ' workbook.         WS_Count = ActiveWorkbook.Worksheets.Count         ' Begin the loop.         For I = 1 To WS_Count            ' Insert your code here.            ' The following line shows how to reference a sheet within            ' the loop by displaying the worksheet name in a dialog box.            MsgBox ActiveWorkbook.Worksheets(I).Name         Next I      End Sub

  2. Чтобы запустить макрос, поместите курсор в строку, которая считывает «Sub WorksheetLoop()» и нажмите клавишу F5.

Макрос будет цикла книги и отображает окно сообщения с именем другого листа при каждом выполнении цикла. Обратите внимание, что этот макрос будет отображать только имена листов; он будет отображаться имена других типов листов в книге. Можно также использовать цикл через все листы в книге с помощью цикла «For Each».

  1. Введите следующий код макроса в лист модуля.

          Sub WorksheetLoop2()         ' Declare Current as a worksheet object variable.         Dim Current As Worksheet         ' Loop through all of the worksheets in the active workbook.         For Each Current In Worksheets            ' Insert your code here.            ' This line displays the worksheet name in a message box.            MsgBox Current.Name         Next      End Sub

  2. Чтобы запустить макрос, поместите курсор в строку, которая считывает «Sub WorksheetLoop2()» и нажмите клавишу F5.

Этот макрос работает одинаково в макрос WorksheetLoop, за исключением того, что он использует другой тип цикла для обработки все листы активной книги.

Ссылки

Дополнительные сведения о получении справки по Visual Basic для приложений обратитесь к следующей статье Microsoft Knowledge Base:

163435 VBA: программные ресурсы для Visual Basic для приложений

226118 OFF2000: программные ресурсы для Visual Basic для приложений

Нужна дополнительная помощь?

Понравилась статья? Поделить с друзьями:
  • Excel макрос сохранить файл с поддержкой макросов
  • Excel макрос сохранить листья
  • Excel макрос сохранить лист как отдельный файл
  • Excel макрос сохранить копию
  • Excel макрос сохранить как xls