Excel файлы в листы с именем файла

Сохранение листов книги как отдельных файлов

Про сборку листов из нескольких книг в одну текущую я уже писал здесь. Теперь разберем решение обратной задачи: есть одна книга Excel, которую нужно «разобрать», т.е. сохранить каждый лист как отдельный файл для дальнейшего использования.

save-sheets-as-files.png

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

Если делать эту процедуру вручную, то придется для каждого листа выполнить немаленькую цепочку действий (выбрать лист, правой кнопкой по ярлычку листа, выбрать Копировать, указать отдельный предварительно созданный пустой файл и т.д.) Гораздо проще использовать короткий макрос, автоматизирующий эти действия.

Способ 1. Простое разделение

Нажмите сочетание Alt+F11 или выберите в меню Сервис — Макрос — Редактор Visual Basic (Tools — Macro — Visual Basic Editor), вставьте новый модуль через меню Insert — Module и скопируйте туда текст этого макроса:

Sub SplitSheets1()
    Dim s As Worksheet
    For Each s In ActiveWorkbook.Worksheets    'проходим по всем листам в активной книге
        s.Copy       'копируем каждый лист в новый файл
    Next
End Sub

Если теперь выйти из редактора Visual Basic и вернуться в Excel, а затем запустить наш макрос (Alt+F8), то все листы из текущей книги будут разбиты по отдельным новым созданным книгам.

Способ 2. Разделение с сохранением

При необходимости, можно созданные книги сразу же сохранять под именами листов. Для этого макрос придется немного изменить, добавив команду сохранения в цикл:

Sub SplitSheets2()
    Dim s As Worksheet
    Dim wb as Workbook
    Set wb = ActiveWorkbook
    For Each s In wb.Worksheets                                 'проходим во всем листам активной книги
        s.Copy                                                  'сохраняем лист как новый файл
        ActiveWorkbook.SaveAs wb.Path & "" & s.Name & ".xlsx"  'сохраняем файл
    Next
End Sub

Этот макрос сохраняет новые книги-листы в ту же папку, где лежал исходный файл. При необходимости сохранения в другое место, замените wb.Path на свой путь в кавычках, например «D:Отчеты2012» и т.п.

Если нужно сохранять файлы не в стандартном формате книги Excel (xlsx), а в других (xls, xlsm, xlsb, txt и т.д.), то кроме очевидного изменения расширения на нужное, потребуется добавить еще и уточнение формата файла — параметр FileFormat:

ActiveWorkbook.SaveAs wb.Path & "" & s.Name & ".xlsb", FileFormat:=50  

Для основных типов файлов значения параметра FileFormat следующие:

  • XLSX = 51
  • XLSM = 52
  • XLSB = 50
  • XLS = 56
  • TXT = 42

Полный список всех вариантов можно посмотреть в справке MSDN.

Способ 3. Сохранение в новые книги только выделенных листов

Если вы хотите раскидать по файлам не все листы в вашей книге, а только некоторые, то макрос придется немного изменить. Выделите нужные вам листы в книге, удерживая на клавиатуре клавишу Ctrl или Shift и запустите приведенный ниже макрос:

Sub SplitSheets3()
    Dim AW As Window
    Set AW = ActiveWindow
    For Each s In AW.SelectedSheets
        Set TempWindow = AW.NewWindow    'создаем отдельное временное окно
        s.Copy                           'копируем туда лист из выделенного диапазона
        TempWindow.Close                 'закрываем временное окно
    Next
End Sub

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

Способ 4. Сохранение только выделенных листов в новый файл

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

Sub SplitSheets4()
    Dim CurW As Window
    Dim TempW As Window
    Set CurW = ActiveWindow
    Set TempW = ActiveWorkbook.NewWindow
    CurW.SelectedSheets.Copy
    TempW.Close
End Sub

Способ 5. Сохранение листов как отдельных PDF-файлов

Этот способ чем-то похож на второй, но листы сохраняются не как отдельные книги Excel, а в формате PDF, что часто требуется, если никто не должен менять документ и увидеть ваши формулы. Обратите внимание, что:

  • для этого используется уже другой метод (ExportAsFixedFormat а не Copy)
  • листы выводятся в PDF с параметрами печати, настроенными на вкладке Разметка страницы (Page Layout)
  • книга должна быть сохранена на момент экспорта

Нужный нам код будет выглядеть следующим образом:

Sub SplitSheets5()
    Dim s As Worksheet

    For Each s In ActiveWorkbook.Worksheets
        s.ExportAsFixedFormat Filename:=ThisWorkbook.Path & "" & s.Name & ".pdf", Type:=xlTypePDF
    Next
End Sub

Способ 6. Готовый макрос из надстройки PLEX

Если лень или нет времени внедрять все вышеописанное, то можно воспользоваться готовым макросом из моей надстройки PLEX:

Ссылки по теме

  • Сборка листов из нескольких книг в одну
  • Что такое макросы, куда вставлять код на Visual Basic, как их использовать.

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

nshardarbekov@mail.ru
Добрый день, уважаемые!
Помогите пожалуйста создать макрос, для того чтобы собрать (скопировать) листы с одинаковыми названиями из разных файлов Excel в один файл Excel, и название листов бралось из названия книги .
Ищу уже третий день подходящего найти не могу(((

Вводная информация:
1. Имеется 22 книги , в каждой по 12 листов , названия листов в каждой книге одинаковые
2. Книги находятся в одной папке.

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

Огромная просьба помочь!!!
Приложу 2 книги для примера

Excel для Microsoft 365 Excel 2021 Excel 2019 Excel 2016 Excel 2013 Excel 2010 Еще…Меньше

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

Вставка текущего имени файла, его полного пути и имени активного листа

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

=ЯЧЕЙКА(«filename»)

Вставка текущего имени файла и имени активного листа

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

=ПРАВСИМВ(ЯЧЕЙКА(«filename»);ДЛСТР(ЯЧЕЙКА(«filename»))- МАКС(ЕСЛИ(НЕ(ЕОШ(ПОИСК(«»;ЯЧЕЙКА(«filename»); СТРОКА(1:255))));ПОИСК(«»;ЯЧЕЙКА(«filename»);СТРОКА(1:255)))))

Примечания: 

  • Чтобы ввести формулу в виде формулы массива, нажмите клавиши CTRL+SHIFT+ВВОД.

  • Формула возвращает имя листа, если он был сохранен хотя бы один раз. Если вы используете эту формулу на несохраненном листе, ячейка формулы останется пустой, пока вы не сохраните лист.

Вставка только текущего имени файла

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

=ПСТР(ЯЧЕЙКА(«filename»);ПОИСК(«[«;ЯЧЕЙКА(«filename»))+1; ПОИСК(«]»;ЯЧЕЙКА(«filename»))-ПОИСК(«[«;ЯЧЕЙКА(«filename»))-1)

Примечание: Если вы используете эту формулу на несохраненном листе, вы увидите сообщение об ошибке #ЗНАЧ! в ячейке. После сохранения листа ошибка заменяется именем файла.

Дополнительные сведения

Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.

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

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

Откройте новую книгу, а затем выполните следующие действия для создания именованной формулы.

  1. Выполните команду Формулы ► Присвоить имя, чтобы открыть диалоговое окно Создание имени.
  2. Впишите в поле Имя название Список.
  3. Введите следующую формулу в поле Диапазон (рис. 8.1): =ФАЙЛЫ(Лист1!$A$1).
  4. Нажмите ОК, чтобы закрыть окно Создание имени.

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

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

Обратите внимание: функция ФАЙЛЫ не относится к стандартным функциям рабочего листа. Это макрофункция, написанная в сравнительно старом XLM-стиле и предназначенная для использования на специальном листе макросов. Она принимает один аргумент (путь к каталогу и описание файла) и возвращает массив имен файлов, содержащихся в данном каталоге и удовлетворяющих описанию файла. Обычные формулы рабочего листа не могут использовать подобные XLM-функции, а именованные формулы — могут.

Определив именованную формулу, введите в ячейку А1 путь к каталогу и описание файла. Например: C:Excelexpert.ru* *. Далее формула отображает первый найденный файл: =ИНДЕКС(Список;1). Если изменить второй аргумент на 2, то будет отображен второй найденный файл и т. д. На рис. 8.2 приведен пример. Путь и описание файла указаны в ячейке А1. В ячейке А2 содержится следующая формула, скопированная далее по столбцу: =ИНДЕКС(Список;СТР0КА()-1). Функция СТРОКА, используемая здесь, генерирует ряд последовательных натуральных чисел: 1,2,3 и т. д. Эти числа используются в качестве второго аргумента функции ИНДЕКС.

Рис. 8.2. Использование XLM-макроса в именованной формуле позволяет создать на листе список имен файлов

Рис. 8.2. Использование XLM-макроса в именованной формуле позволяет создать на листе список имен файлов

Обратите внимание: в ячейке А17 (и ниже) происходит ошибка. Дело в том, что в каталоге содержится всего 19 файлов и формула пытается отобразить имена несуществующих. Если изменить каталог или описание файла в ячейке А1, то формулы обновляются и выводят имена новых файлов.

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

Сбор листов в один файл

sharipovsergei

Дата: Пятница, 30.09.2022, 13:19 |
Сообщение № 1

Группа: Пользователи

Ранг: Прохожий

Сообщений: 4


Репутация:

0

±

Замечаний:
0% ±


Добрый день, коллеги.
Не получается реализовать следующий алгоритм работы с файлами:
Дано:
Файлы с разными именами
каждый файл имеет некую форму требующую заполнения.
макрос в файлах копирует лист в этот же файл, удаляет лишнее и переименовывает его в зависимости от значения в одной из ячейки
таких листов в файлах может быть разное количество
Требуется:
Собрать все листы в один общий файл исключая листы с формами из файлов доноров.
В общем файле прицепить к каждому листу кнопку «согласовано», «не согласовано» соответственно сохранить в таблицу, удалить.

Во вложении файл в котором я проводил тренировки
Спасибо за любую помощь.

К сообщению приложен файл:

2412164.xlsm
(375.4 Kb)

 

Ответить

msi2102

Дата: Пятница, 30.09.2022, 17:26 |
Сообщение № 2

Группа: Проверенные

Ранг: Обитатель

Сообщений: 290


Репутация:

104

±

Замечаний:
0% ±


Excel 2007

Мне кажется, это больше похоже на ТЗ для раздела «Работа/Фриланс»

 

Ответить

Serge_007

Дата: Пятница, 30.09.2022, 17:29 |
Сообщение № 3

Группа: Админы

Ранг: Местный житель

Сообщений: 15888


Репутация:

2623

±

Замечаний:
±


Excel 2016

На ТЗ непохоже :)


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

msi2102

Дата: Пятница, 30.09.2022, 18:26 |
Сообщение № 4

Группа: Проверенные

Ранг: Обитатель

Сообщений: 290


Репутация:

104

±

Замечаний:
0% ±


Excel 2007

блин, ну как не похоже, вот с чем нужно конкретно помочь? Собрать все листы в один файл? Или поместить кнопку на лист, а ещё нужно написать макрос который будет выполнять какие-то действия, по нажатию этой кнопки. Опять же возникает куча вопросов, как собирать все листы, по отдельности или все на один лист. Сколько будет этих файлов доноров, где они будут расположены, какие листы не должны копироваться. В приложенном файле тоже неразбериха, макросы, скорее всего, работают не так как нужно, их тоже редактировать? Это всё нужно выяснять. Я не работаю в платных разделах, но как по мне, тут точно комплекс работ, причем больше работы будет с ТС, что бы понять для чего ему это нужно.
Ну а в качестве любой помощи, могу посоветовать копировать листы не в тот же файл, а на каждую карточку создавать отдельный файл с определённым именем в специальную папку, откуда потом их можно собирать, или открывать для просмотра, согласования, редактирования и т.д. И тогда файл-шаблон не будет пухнуть и будет формироваться архив карточек. Возможно, как один из вариантов, в управляющем файле можно будет обойтись гиперссылками. Кнопку согласовано не согласованно можно сразу вешать при выгрузке этих карточек, а можно обойтись без кнопок, а отправлять карточки в разные папки (одна папка согласованно, вторая несогласованно) из управляющего файла.
Просто я к чему веду, чтобы помочь, ТС должен понимать, что именно он хочет в чем нужна помощь.

Сообщение отредактировал msi2102Пятница, 30.09.2022, 18:54

 

Ответить

sharipovsergei

Дата: Суббота, 01.10.2022, 16:00 |
Сообщение № 5

Группа: Пользователи

Ранг: Прохожий

Сообщений: 4


Репутация:

0

±

Замечаний:
0% ±


msi2102, привет.
В общем, делаю для себя, оптимизирую работу и параллельно изучаю ВБА.
У меня есть несколько объектов недвижимости (не лично у меня, я наемный инженер по эксплуатации), на каждом объекте есть управляющий, для них по каждой базе планируется отдельный файл с такой карточкой-бланком и для инженера отдельный файл, а также для главного энергетика, то есть по каждому объекту 3 файла. Мне нужно собрать все данные от 25 объектов, соответственно 25х3 файлов с определенными именами в один, затем, хочу при защите бюджета просто нажатием кнопки согласовано, что-бы данные попадали в таблицу.
Мне не нужно прям целиком код, хоть немного направить, подсказать, вообще это возможно? Я сам пытаюсь разобраться, но немного не дотягиваю.
Файлы планируется хранить в одном и том же месте на сервере с неизменными именами.
В файле, который я приложил, код работает, но та часть, которая просто копирует листы в этом же файле, сохраняя карточки, я сам его писал.

 

Ответить

msi2102

Дата: Понедельник, 03.10.2022, 13:09 |
Сообщение № 6

Группа: Проверенные

Ранг: Обитатель

Сообщений: 290


Репутация:

104

±

Замечаний:
0% ±


Excel 2007

sharipovsergei, Вы не услышали меня. Я Вам ещё раз советую, не копировать Ваши карточки в этот-же файл, от этого файл будет пухнуть, будут допускаться ошибки и т.п. Копируйте карточку в специальную папку, с правильным именем карточки (например: «Адрес_Дата_№»), с которым будут работать инженер и энергетик, после его согласования он должен переноситься в другую папку, например название папки «согласованно». Можно завести лист согласований, из которого будет выполняться эта операция, можно придумать множество решений, даже вполне рабочий Ваш вариант с кнопками «Согласованно» в самой карточке.
Но если всё-таки Вам нужно именно копирование листов из этих книг, то почитайте ТУТ

 

Ответить

sharipovsergei

Дата: Понедельник, 03.10.2022, 13:22 |
Сообщение № 7

Группа: Пользователи

Ранг: Прохожий

Сообщений: 4


Репутация:

0

±

Замечаний:
0% ±


msi2102, спасибо огромное, да, это не плохой вариант.

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

 

Ответить

msi2102

Дата: Понедельник, 03.10.2022, 17:33 |
Сообщение № 8

Группа: Проверенные

Ранг: Обитатель

Сообщений: 290


Репутация:

104

±

Замечаний:
0% ±


Excel 2007

Я Вам набросал примерно как-бы это могло бы выглядеть
На диске C создайте папку «C:Temp» в это папке ещё две папки «C:TempСогласованно» и «C:TempНа_доработку»
Запускайте приложенные файлы. «Проба.xlsm» файл который заполняют управляющий. После нажатия кнопки «Выгрузка» лист Шаблон сохраняется, как отдельный файл в папке «C:Temp». Перейдите к файлу «Инженер.xlsm» нажмите кнопку «Обновить». В таблице появится название файла с гиперссылкой, статус, и его путь. Нажимаем на гиперссылку, откроется этот файл «C:TempИмя_файла» у которого будет две кнопки «Согласованно» и «На доработку». По нажатию кнопки согласованно, файл перенесется в папку «Согласованно» в формате «.xlsx», и установится пароль на изменения листа (1111), т.к. уже согласованно и не должно быть никаких изменений. Если будет нажата кнопка «На доработку», то файл переместится в папку «На_доработку» и появится одна кнопка «Выгрузить». После коррекции данных в Файле управляющим он жмет кнопку «Выгрузить» и этот файл вновь перемещается в папку «C:Temp». Если в файле «Инженер» нажать «обновить», то Вы увидите все изменения.

А если рассматривать вариант из примера, но без диалогового окна, а сбор данных из конкретных имеющихся файлов

Я думаю с этим Вы сами сможете разобраться
PS Переименуйте файлы: файл с листом ССЫЛКИ это «Инженер.xlsm», а файл с листом «Шаблон» это «Проба.xlsm»

Сообщение отредактировал msi2102Понедельник, 03.10.2022, 17:38

 

Ответить

Serge_007

Дата: Понедельник, 03.10.2022, 17:37 |
Сообщение № 9

Группа: Админы

Ранг: Местный житель

Сообщений: 15888


Репутация:

2623

±

Замечаний:
±


Excel 2016

блин, ну как не похоже, вот с чем нужно конкретно помочь?

Да, задача «размыта» и, действительно, сложно понять в чем именно надо помочь
Но и ТЗ так не делают, если результат требуется :)


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

msi2102

Дата: Понедельник, 03.10.2022, 17:46 |
Сообщение № 10

Группа: Проверенные

Ранг: Обитатель

Сообщений: 290


Репутация:

104

±

Замечаний:
0% ±


Excel 2007


А так?

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

Чем не ТЗ. Так ещё и нет конкретного понимания, что именно надо
:facepalm:

 

Ответить

Serge_007

Дата: Понедельник, 03.10.2022, 17:50 |
Сообщение № 11

Группа: Админы

Ранг: Местный житель

Сообщений: 15888


Репутация:

2623

±

Замечаний:
±


Excel 2016

ещё и нет конкретного понимания, что именно надо

Вот именно!
Потому что

делаю для себя, оптимизирую работу и параллельно изучаю ВБА

Поэтому и

Во вложении файл в котором я проводил тренировки

и

В ТЗ не прикладывают файл с «тренировками» и не благодарят за любую помощь, а требуют всё сделать без пояснений, быстро и сразу :D


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

msi2102

Дата: Понедельник, 03.10.2022, 18:04 |
Сообщение № 12

Группа: Проверенные

Ранг: Обитатель

Сообщений: 290


Репутация:

104

±

Замечаний:
0% ±


Excel 2007

В ТЗ не прикладывают файл с «тренировками»

а Вы открывали этот файл? Это исходные данные для работы, а не его пробы и ошибки по тем вопросам которые он задаёт. Дело в том, что я абсолютно не против помочь, я даже двумя руками ЗА, но было бы понятно с чем помогать. Ну написал бы просто: «Помогите собрать определенные листы из нескольких файлов в один». Да понятно, что именно нужно. А спасибо за любую помощь, это элементарная вежливость. К тому же

Мне не нужно прям целиком код, хоть немного направить, подсказать, вообще это возможно?

Помог, направил:
И вот следующий вопрос

А если рассматривать вариант из примера, но без диалогового окна

И что изменилось? По сути это сделайте за меня, поэтому я и говорю, что даже учитывая всю вежливость ТС это больше похоже на ТЗ

Сообщение отредактировал msi2102Понедельник, 03.10.2022, 18:29

 

Ответить

sharipovsergei

Дата: Вторник, 04.10.2022, 10:26 |
Сообщение № 13

Группа: Пользователи

Ранг: Прохожий

Сообщений: 4


Репутация:

0

±

Замечаний:
0% ±


Коллеги, ТЗ, не ТЗ. Вопрос скорее к возможностям ВБА и общей методики реализации. Я совсем не программист.
Я простой инженер по эксплуатации задний и сооружений (могу доказать :D ). Есть простая задача от руководства, собирать все данные от нескольких объектов, затем на совещании по защите тех или иных работ, просматривая задачи, уже коллегиально, принимается решение «делаем», «не делаем».
Сейчас это реализовано вручную. Есть один файл с таблицей и там вносят работы все кому не лень. Как писал выше управляющие и инженеры (эксплуатация).
«Языки» на котором говорят управляющие и инженеры, разные, более того, некоторые инженеры пишут такое, что дойдя до защиты вообще не понятно кто что имеет ввиду.
Можно продолжать работать вручную, обзванивать всех, уточнять, требовать фото, но я решил упростить себе задачу, начал с того, что сделал карточку, где довольно подробно можно расписать что имеется в виду (эти подробности нужны обязательно для обоснований). Карточки планирую хранить в течении от года (в соответствии со сроком реализации того или иного проекта). Например при смене инженера объекта любой может зайти в карточку и посмотреть, что конкретно подразумевалось под «ремонтом сети отопления».
На карточках можно было бы остановиться и собирать карточки в таблицу вручную но я решил пойти дальше и подумал, а ВБА способен-ли собирать все автоматически. По этому я здесь. Весь функционал и возможности ВБА я еще не раскрыл. Скачал недавно некий ЁКСЕЛЬ (это целая вкладка написанная на ВБА каким-то хорошим человеком) Там реализована работа с файлами, папками и довольно не плохо реализована, пока пытаюсь разобраться как применить это к моему случаю.
Результатом работы буду считать облегчение труда по сбору данных.
Никакой финансовой выгоды не преследую. Если получится это реализовать, с удовольствием поделюсь бесплатно со всеми, кому подобная реализация будет нужна.

Как я вижу это:
Файл — сводные данные
лист 1 таблица (для финансистов)
лист 2… и т.д. карточки

папка 1 объекта
файл Гл.Инженера
лист 1 БЛАНК
лист 2 заявка 1
лист 3 заявка 2

файл Инженера объекта
лист 1 БЛАНК
лист 2 заявка 1
лист 3 заявка 2

файл Управляющего
лист 1 БЛАНК
лист 2 заявка 1
лист 3 заявка 2

Папка 2 объекта
файл Гл.Инженера
лист 1 БЛАНК
лист 2 заявка 1
лист 3 заявка 2

файл Инженера объекта
лист 1 БЛАНК
лист 2 заявка 1
лист 3 заявка 2

файл Управляющего
лист 1 БЛАНК
лист 2 заявка 1
лист 3 заявка 2

Папка 2 объекта
… и т.д.
Почему отдельные файлы каждому специалисту? При начале сбора данных в файлах работают все, а одновременная работа с файлами на сервере невозможна, при одновременной работе, сохранение происходит с изменением имени файла и, думаю, что это усложнит задачу по сбору всех данных в один файл.

В общем, не настаиваю ни на чем. Спасибо за все предыдущие советы. Воспользуюсь.
P.S. еще подсказали интересную мысль — обратить внимание на «Гугл формы», сегодня посмотрю как это можно реализовать частично через них. Есть ли возможность выгрузки в эксель.

 

Ответить

На чтение 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 с поддержкой макросов с расширением так xlsm, на ленте должен находиться в последнем пункте — пункт Разработчик, если его нет, то в файл, параметры нужно будет в настройках ленты добавить этот пункт, отметьте его галочкой.

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

таблица с кнопкой

Перейдём на вкладке Разработчик в Visual Basic либо нажмем Alt+F11, для того чтобы открылся редактор макросов.

Нажмем в меню insertmodule, напишем модуль Sub ListTempl(), объявим переменную tmpName.

редактор VBA с кодом

Получим данные нашего списка из листа список в переменную tmpName, объявив диапазон А1:А3. Но если нужно будет больше, то будем менять это значение. Пока в примере оставим так.

Напишем цикл for от 1 до 3, по сколько мы знаем конечное количество записей нашего списка и теперь сделаем копию листа шаблон, создадим новый лист копии листа с шаблоном, шаблон и присвоим имя каждому листу, значение то которое у нас находится в списке. Закончим цикл next i.

Теперь нажмем правой кнопкой на кнопке, назначить макрос, выберем макрос ListTempl, OK, сохранить.

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

Sub ListTempl()
Dim tmpName
tmpName = Sheets("Шаблон").Range("a1:a3")

For i = 1 To 3
Sheets("Шаблон").Copy Before:=Sheets(i)
Sheets(i).Name = tmpName(i, 1)
Next i

End Sub

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

заполненные таблицы по шаблону

Если нажать на кнопку повторно, то Excel выдаст ошибку, что подобные листы уже используется, надо учитывать этот момент, просто удалите дубли, в этом примере я не буду делать повторную проверку или добавление каких-то случайных значений к имени листов.

Давайте добавим теперь в шапку шаблона формулу, которая будет в ячейку присваивать имя листа, сейчас формула находится на листе с названием шаблон.

Эта формула позволяет получить из значение листа имя листа в ячейку, происходит разбор пути файла до листа.

=ПРОПНАЧ(ПСТР(ЯЧЕЙКА("имяфайла";A1);ПОИСК("]";ЯЧЕЙКА("имяфайла";A1))+1;99))

Давайте допишет для примера как это бывает в таблицах, «Список для », а далее будет фамилия поставляться из названия листа.

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

заполненные листы по шаблону

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

Если же всё-таки вам нужно будет сделать два листа для одной уникальной записи, тут могу предложить следующее.

Изменим в коде диапазон на А4, так как у нас ещё один пункт добавился и в цикле исправим на четыре.

Sub ListTempl()
Dim tmpName
tmpName = Sheets("Шаблон").Range("a1:a4")

For i = 1 To 4
Sheets("Шаблон").Copy Before:=Sheets(i)
Sheets(i).Name = tmpName(i, 1)
Next i

End Sub

Удалим всё снова и нажмем на кнопку. Опять ошибка, как вариант предлагаю добавить пробел в конце названия дублируемого пункта списка.

В итоге у нас получилось два Ивановых, конечно лучше использовать уникальные значения, тогда этот пример будет достаточно хорошо вам подходить.

листы с не уникальными записями

Смотрите видео: Листы в Excel из списка по шаблону

Понравилась статья? Поделитесь ею с друзьями и напишите отзыв в комментариях!

Skip to content

На чтение 2 мин. Просмотров 1.9k.

Что делает макрос: Данный макрос поможет создать новый файл для каждого листа существующей книги.

Содержание

  1. Как макрос работает
  2. Код макроса
  3. Важно
  4. Как работает этот код
  5. Как использовать

Как макрос работает

В этом макросе помечаются рабочие листы, копируется каждый лист, а затем отправляет копию в новую книгу. Надо отметить здесь, что вновь созданные книги сохраняются в том же каталоге, что и исходные, с именем, скопированного листа (wb.SaveAs ThisWorkbook.Path & «» & ws.Name).

Код макроса

Sub SozdatNoviiFailDlyaKajdogoLista()
'Шаг 1: Объявляем переменные
Dim ws As Worksheet
Dim wb As Workbook
'Шаг 2: Запускаем цикл через листы
For Each ws In ThisWorkbook.Worksheets
'Шаг 3: Создаем новую рабочую книгу и сохраняем ее.
Set wb = Workbooks.Add
wb.SaveAs ThisWorkbook.Path & "" & ws.Name
'Шаг 4: Копируем целевой лист в новую книгу
ws.Copy Before:=wb.Worksheets(1)
wb.Close SaveChanges:=True
'Шаг 5: Возвращаемся в п.2.
Next ws
End Sub

Важно

Не всегда возможно заменить новые книги определенными именами файлов. Windows имеет конкретные правила, которые мешают именовать файлы с определенными символами. Нельзя использовать эти символы при вводе имени файла: обратная косая черта (), косая черта (/), двоеточие (:), звездочка (*), знак вопроса (?), трубы (|), кавычки («), больше ( > ) и меньше (<). Используя данный макрос, назвав вновь созданный файл в соответствии с именем листа может привести к ошибке. Например, макрос выдает ошибку при создании нового файла из листа под названием Май| Выручка (из-за знака «|» ).
Нельзя именовать файлы с запрещенными знаками.

Как работает этот код

  1. Шаг 1 объявляет две переменные объекта. Переменная WS создает контейнер памяти для каждого листа макросов с помощью цикла. Переменная создает контейнер для новых рабочих книг.
  2. На шаге 2 макрос начинает цикл через листы. Использование объекта ThisWorkbook гарантирует, что активный лист копирует код книги, которая создается.
  3. На шаге 3, мы создаем новую книгу и сохраняем её в том же месте, что и исходную (файл thisworkbook). Имя файла будет такое же имя, что и имя листа.
  4. Шаг 4 копия активного листа использует параметр, прежде чем отправить его к новой книге, как первую вкладку.
  5. Шаг 5 повторяем шаг 2 для следующего листа. После того как все листы будут скопированы макрос завершает работу.

Как использовать

Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
  3. Выберите Insert➜Module.

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Excel файлы в dropbox
  • Excel условное форматирование цветом повторяющиеся значения
  • Excel файлов по ссылкам в таблице
  • Excel условное форматирование цветом по цвету другой ячейки
  • Excel файл это архив

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии