Сборка листов из разных книг в одну

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

Открываем книгу, куда хотим собрать листы из других файлов, входим в редактор Visual Basic сочетанием клавиш Alt+F11 одноименной кнопкой на вкладке Разработчик (Developer - Visual Basic), добавляем новый пустой модуль (в меню Insert - Module) и копируем туда текст вот такого макроса:

 
Sub CombineWorkbooks()
    Dim FilesToOpen
    Dim x As Integer

    Application.ScreenUpdating = False  'отключаем обновление экрана для скорости
    
    'вызываем диалог выбора файлов для импорта
    FilesToOpen = Application.GetOpenFilename _
      (FileFilter:="All files (*.*), *.*", _
      MultiSelect:=True, Title:="Files to Merge")

    If TypeName(FilesToOpen) = "Boolean" Then
        MsgBox "Не выбрано ни одного файла!"
        Exit Sub
    End If
    
    'проходим по всем выбранным файлам
    x = 1
    While x <= UBound(FilesToOpen)
        Set importWB = Workbooks.Open(Filename:=FilesToOpen(x))
        Sheets().Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
        importWB.Close savechanges:=False
        x = x + 1
    Wend

    Application.ScreenUpdating = True
End Sub

После этого можно вернуться в Excel и запустить созданный макрос на вкладке Разработчик кнопкой Макросы (Developer - Macros) или нажав Alt+F8. Отобразится диалоговое окно открытия файла, где необходимо указать один или несколько (удерживая Ctrl или Shift) файлов, листы из которых надо добавить к текущей книге - и задача решена!

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

 


Страницы: 1  2  
Доброго времени суток

а csv файлы есть макрос для сборки в одну книгу?

а то ни один не работает(

спасибо
09.10.2015 14:07:32
Спасииииибо большое за МАКРОС!!!! хотелось бы узнать а как сделать так,чтобы не листы переносились в другой документ,а только определенные значения из ячеек?
Добрый день) Прошу прощения за глупый вопрос, а где посмотреть код макроса в PLEX (полная версия)?
Благодарю:)
27.05.2016 15:30:45
Добрый вечер!
Использовала макрос, классная штука.
У меня отчетности 30 компаний, в каждом из них есть Баланс, ОПИУ И ДДС.
Мне нужно собрать только эти три листа в один файл, а остальные листы оставить.
Можете мне помочь с макросом, т.к. сама непониманию макросы.

Спасибо!!!
08.06.2016 13:08:47
Добрый день!

Воспользовалась макросом для объединения нескольких книг в одну

Sub CombineWorkbooks()
   Dim FilesToOpen
   Dim x As Integer

   Application.ScreenUpdating = False  'отключаем обновление экрана для скорости
   
   'вызываем диалог выбора файлов для импорта
   FilesToOpen = Application.GetOpenFilename _
(FileFilter:="All files (*.*), *.*", _
MultiSelect:=True, Title:="Files to Merge";)

   If TypeName(FilesToOpen) = "Boolean" Then
 MsgBox "Не выбрано ни одного файла!"
 Exit Sub
   End If
   
   'проходим по всем выбранным файлам
   x = 1
   While x <= UBound(FilesToOpen)
 Set importWB = Workbooks.Open(Filename:=FilesToOpen(x))
 Sheets().Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
 importWB.Close savechanges:=False
 x = x + 1
   Wend

   Application.ScreenUpdating = True
End Sub

все работает, большое спасибо)
Есть только один глупый вопрос)
Как сделать так, чтобы данные в объединенной книге обновлялись по мере внесения изменений в объединяемые книги?
Заранее благодарю!  
08.07.2016 06:54:35
а как можно сделать так, чтобы этот макрос переносил не содержание ячеек (если они заполнены по формулам), а только текст?
20.07.2016 22:20:13
Добрый день!
Спасибо за Вашу работу, Николай!
Скажите, пожалуйста, как реализовать автоматическое подтягивание информации из разных книг? То есть имеется много книг и я хочу выборочно оттуда вытянуть информацию в одну книгу. Т.к. в этих книгах информация ежедневно обновляется, требуется чтобы в моей книге, при открывании тоже проходило обновление.
Заранее спасибо.
17.01.2017 17:25:41
Здравствуйте. Помоги пожалуйста. У меня такая проблема. Каждый месяц у меня есть по 2000 файлов. Все называются по разному, но информация у всех находится на листе1. Разница в том, что сначала 14 строк идет информация не нужная, на каждом листе разная, а уже ценная информация начинается с 15 строки от столбца A до AA.(это у всех файлов одинаково). А вот вниз таблица у всех разная, у кого то 10 строк, у кого то 200 строк. 14 строкой идет шапка таблицы, но я могу ее потом вручную вставить в готовый документ. Главное чтобы табличная часть попала из этих файлов в новый документ друг за другом вниз не прерываясь. Чтобы в итоге получить длинную готовую таблицу на одном листе. Это нужно, для возможности делать сортировку в каждом столбце, в зависимости от информации. Пыталась делать разными макросами, но выходит вся инфа на одном листе, но все подряд. Делала и с выделением диапазона, но файл получался странный, вначале была информация  из первого файла и потом почему то только  названия файла.
18.01.2017 16:35:20
Добрый день, помогите пожалуйста есть пять пользователей у которых одинаковая по форме таблица, данные из этих таблиц должна собираться в таблице 1 (но пользователь этой таблице тоже заносит свои данные), с этими макросами у меня получилось, что таблицы с данными добавились, но как вкладки. Подскажите это что-то я неправильно сделал или нужен новый макрос.

Решение нашел. :D
16.01.2018 22:34:48
Добрый день.
А можно преобразовать этот макрос таким образом, чтобы можно было собирать данные не с одной папки, а сразу с нескольких?
26.03.2018 22:17:43
Добрый вечер!
Подскажите, пожалуйста, что я нитак делаю((((

Раньше работала на Винде, и Ваши макросы на Копи-Паст прекрасно работали. Теперь на Маке, и как-то не получается, хотя у меня ощущение, что это не проблема.
https://cloud.mail.ru/public/6D56/BZrXYpVre
26.03.2018 22:29:54
Я даже пересохранила некоторые файлы .xls., но все также.(((
28.03.2018 18:42:04
Увы, на Винде все сработало в два клика, что и радует и огорчает.(( Видимо причина в Мак ось((
13.04.2018 16:34:06
Подскажите как сделать вместо номера имя файла?
Потипу
Sheets().Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.FILENAME)
18.04.2018 06:58:03
Кому необходимо собрать данные из разных книг, то бесплатная надстройка для этого есть здесь vk.com/excelsql
Называется

Merge & Totals (Надстройка для слияния книг и листов)
26.07.2018 16:28:32
данный макрос переносит все ячейки в одну (Компьютер;Дата проверки) строки переносит нормальнов а все столбцы переносить только в столбец A исходном файле это разные ячейки как сделать чтоб он переносил таблицу так как она есть
12.06.2019 12:14:40
Всем доброго времени суток.

Есть необходимость собирать данньіе из *.csv файлов, решение возможно? Вообще.
14.06.2019 08:59:48
Для этого есть бесплатная надстройка Power Query от Microsoft - она замечательно с этим справляется. Начиная с 2016 уже встроена в Excel по умолчанию.
11.12.2019 10:58:24
Здравствуйте. Присоединяюсь к вопросу Наты от 08.07.2016. Необходим макрос, который собирал бы только значения (минуя формулы) с листов из разных книг в одну книгу. Очень нужно.  
09.02.2020 09:38:45
ЭТО ПРОСТО БОГОПОДОБНО! ЛУЧШЕ БЫ ВАМ ГОСУДАРСТВО ДЕНЬГИ КАК ПОДДЕРЖКУ ВЫДАВАЛО ТРАНШАМИ (А НЕ ВСЯКИМ ТАМ), ЧТОБЫ ВЕЗДЕ ВНЕДРЯЛИ ЭТИ ПРОСТЫЕ, НО ОЧЕНЬ НУЖНЫЕ НАВЫКИ. Я ПОЛ ЖИЗНИ В РУКОПАШКУ ВСЕ ЭТО ДЕЛАЛ!!!
07.04.2020 18:40:03
Добрый день! Макрос отличный-работает :, единственное хотелось сохранить его через надстройку , так как часто использую консолидацию книг, но почему то он не работает ( , можете подсказать , что в нем изменить ? Выдаёт ошибку 1004 -method "copy" of object "sheets" failed
показывает будто ошибка в строке Sheets().Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)


без надстройки макрос отлично работает, а с надстройкой выдает такую ошибку после выбора книг которые хочу объединить в одну
08.07.2022 13:23:58
Нужно собрать столбец с шапкой "факт" с разных файлов, но с одинаковым названием листа. Какой код прописать в макросе?
08.07.2022 20:25:24
Воспользовался макросом - все как бы неплохо, НО! формат данных в ячейках не сохраняет (шрифт и его размер...). и Еще одно - у меня порядка 10 однотипных файлов - в каждом много листов, но все они называются одинаково (имеется ввиду - в одном 21 разный лист - в другом файле 21 лист - но названия этих листов в обоих файлах одинаковые).. Получается : если лист зовут АВТО, то сохраняет АВТО1 АВТО2 АВТО3.... Нужен еще макрос чтобы автоматически печатал все листы с одинаковыми названиями (имеется ввиду все АВТО1....21 потом все XXXXX с1 по 21...)?

ну или нужен макрос печати всех листов с одинаковым колонтитулом (текст в верхнем колонтитуле у листов разный - печать привязать к этому тексту)  
18.01.2023 22:28:16
Николай, добрый вечер. Макрос просто супер. Подскажите пожалуйста. при объединении листы подписываются как лист(1), лист (2) и так далее. Можно ли как то убрать скобки, что бы было без скобок, просто лист1, лист2 и т.д?
12.07.2023 13:35:58
Подскажите как возможно изменить макрос таким образом что когда при открытии (импорте) файла он не создавал новый лист с таким же названием а переносил на активный лист данные без изменения имени активного листа.
26.07.2023 05:15:26
Может у меня версия экселя не та, но у меня ничего не работает :/...
26.02.2024 08:35:37
Здравствуйте!
При использовании макроса, после выбора нужных файлов, появляется ошибка:
Run-time error '1004':
Method 'Copy' of object 'Sheets' failed

Как исправить эту ошибку? Что не так делаю?
02.10.2024 20:37:43
Добрый вечер товарищи.

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

** На одном компьютере макрос работает, на другом появляется ошибка.
Вероятно связано с версией Excel.
Большое человечячье спасибо!!!:{}
Страницы: 1  2  
Наверх