powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Объединение листов из нескольких книг в одну.
21 сообщений из 21, страница 1 из 1
Объединение листов из нескольких книг в одну.
    #35697023
Kseniya_T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Существует несколько однотипных книг, по двадцать листов в каждой, лежащие в одной папке.

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

Помогите, пожалуйста, реализовать это на VBA, а то вручную очень-очень трудоёмко!

Например, непонятно, как копировать с каждого листа всю содержащуюся информацию, т.к. она состоит из нескольких диапазонов?

Как перебирать файлы из каталога?
...
Рейтинг: 0 / 0
Объединение листов из нескольких книг в одну.
    #35703583
Kseniya_T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите, пожалуйста!
Нашла примеры поиска последней ячейки /topic/396213
но какой применить для своей задачи точно не знаю.

А как с перебором файлов?

И как же реализовать все целиком??

Помогите, пожалуйста... а то со временем совсем тяжко((
...
Рейтинг: 0 / 0
Объединение листов из нескольких книг в одну.
    #35704192
Pavel55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
См. пример
...
Рейтинг: 0 / 0
Объединение листов из нескольких книг в одну.
    #35704194
Pavel55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
См. пример 2 (не помню, чем они отличаются)
...
Рейтинг: 0 / 0
Объединение листов из нескольких книг в одну.
    #35726711
Kseniya_T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за примеры, но подскажите пожалуйста, как изменить код, чтобы обеспечить условие накопительного копирования не с одного, а с каждого листа исходных книг в общую книгу (разделенных парой пустых строк)?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
Option Explicit

Sub CollectInfo()
Dim BazaWb As Workbook 'текущая книга (общий файл)
Dim BazaSht As Worksheet 'лист Price-group в общем файле
Dim iTempFileName As String 'имя поочерёдно открываемого файла
Dim iPath As String 'путь к папке, где лежат все файлы
Dim iLastRowBaza As Long 'последняя заполненная строка в общем файле в столбце C
Dim iLastRowTempWb As Long 'последняя заполненная строка в по-очерёдно открываемом файле в столбце C
Dim iNumFiles As Long 'количество открываемых файлов

    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
        .Calculation = xlManual
        Set BazaWb = ThisWorkbook
        Set BazaSht = BazaWb.Sheets("Price-group")
        iPath = BazaWb.Path & "\"
        iTempFileName = Dir(iPath & "*.xls")
        Do While iTempFileName <> ""
            If iTempFileName <> BazaWb.Name Then
                With .Workbooks.Open _
                     (Filename:=iPath & iTempFileName, UpdateLinks:=False, ReadOnly:=True)
                     iNumFiles = iNumFiles +  1 
                     'Рабочая книга не должна быть защищена паролем
                     With .Worksheets( 1 )
                          iLastRowTempWb = .Cells(Rows.Count,  3 ).End(xlUp).Row
                          iLastRowBaza = BazaSht.Cells(Rows.Count,  3 ).End(xlUp).Row +  1 
                          .Range(.Cells( 9 ,  1 ), .Cells(iLastRowTempWb, "P")).Copy Destination:=BazaSht.Cells(iLastRowBaza,  1 )
                     End With
                     .Close saveChanges:=False
                End With
            End If
            iTempFileName = Dir
        Loop
        .Calculation = xlAutomatic
        .DisplayAlerts = True
        .ScreenUpdating = True
    End With
    MsgBox "Информация собрана из " & iNumFiles & " файлов!", vbInformation, "Конец"
End Sub
...
Рейтинг: 0 / 0
Объединение листов из нескольких книг в одну.
    #35729983
Pavel55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сложно писать макрос, не видя ваших файлов. Поэтому вам самой придётся корректировать его под свои файлы.
Вот пример макроса, который будет открывать каждый файл и копировать информацию с каждого листа один под другим с разрывом в 2 строки. Каждый лист - отдельный файл со множеством листов


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
Sub CollectInfo()
Dim BazaWb As Workbook 'книга с макросом (общий файл)
Dim BazaSht As Worksheet 'лист в общем файле куда будем копировать
Dim iTempFileName As String 'имя поочерёдно открываемого файла
Dim iPath As String 'путь к папке, где лежат все файлы
Dim iLastRowBaza As Long 'последняя заполненная строка в общем файле
Dim iLastRowTempWb As Long 'последняя заполненная строка в по-очерёдно открываемом файле
Dim iNumFiles As Long 'количество открываемых файлов
Dim TempSht As Worksheet 'каждый лист в открываемых файлах

    If MsgBox("Скопировать информацию из всех файлов в текущей папке в данный файл?", vbOKCancel + vbQuestion, _
        "Копирование инфо") = vbCancel Then Exit Sub
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
        .Calculation = xlManual
        .ShowWindowsInTaskbar = False
        Set BazaWb = ThisWorkbook
        iPath = BazaWb.Path & "\"
        iTempFileName = Dir(iPath & "*.xls")
        Do While iTempFileName <> ""
            If iTempFileName <> BazaWb.Name Then
                Set BazaSht = BazaWb.Sheets.Add
                On Error Resume Next
                BazaWb.Sheets(Left(iTempFileName, Len(iTempFileName) -  4 )).Delete
                On Error GoTo  0 
                BazaSht.Name = Left(iTempFileName, Len(iTempFileName) -  4 )
                With .Workbooks.Open _
                     (Filename:=iPath & iTempFileName, UpdateLinks:=False, ReadOnly:=True)
                    iNumFiles = iNumFiles +  1 
                    For Each TempSht In .Worksheets
                        iLastRowBaza = BazaSht.Cells(Rows.Count,  1 ).End(xlUp).Row +  3 
                        With TempSht
                            iLastRowTempWb = .Cells(Rows.Count,  1 ).End(xlUp).Row
                            'копируем диапазон со столбца А до АС включительно
                            .Range(.Cells( 1 ,  1 ), .Cells(iLastRowTempWb, "AC")).Copy Destination:=BazaSht.Cells(iLastRowBaza,  1 )
                        End With
                    Next
                    .Close saveChanges:=False
                    BazaSht.Rows("1:3").Delete
                End With
            End If
            iTempFileName = Dir
        Loop
        .Calculation = xlAutomatic
        .ShowWindowsInTaskbar = True
        .DisplayAlerts = True
        .ScreenUpdating = True
    End With
    MsgBox "Информация скопирована из " & iNumFiles & " файлов!", vbInformation, "Конец"
End Sub
...
Рейтинг: 0 / 0
Объединение листов из нескольких книг в одну.
    #35745099
Kseniya_T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще раз огромное спасибо)))
В отчаянии и с замиранием души выкладываю пример своего "сокровища". Здесь типовой файл, названия листов и заголовки на страницах не меняются, меняется "наполнение". Таких файлов, если исходить из того, что в месяц их 4 или 5 штук, а всего у нас 12 месяцев, около 54 штук...
Задача состоит в том, чтобы в итоговый файл страницы добавлялись безо всяких премудростей, т.е. нет необходимости оставлять единую шапку каждого листа и добавлять к ней данные, к примеру, если это таблица. Нет. Нужно просто с самой первой строки листа, и до последней заполненной (в Примере это строка "Директор компании", на всех страницах, кроме последней), добавлять их с разделением в пару строк. Хотя... на счет последней страницы возможны варианты - на тему - как раз оставить единую шапку, т.к. она не меняется, и просто "доращивать" данные... С другой стороны, чувствую, что надо и меру знать;)) и так неудобно уже.... Прям сказка А.С. Пушкина вспоминается про "Золотую рыбку", ненасытность супруги старца, до добра не довела))), но все же, очень надеюсь на помощь!!!
Кстати, с праздниками всех! Прошедшими и наступающими!!! Всего самого-самого прекрасного, замечательного и доброго! А главное - крепкого здоровья!
...
Рейтинг: 0 / 0
Объединение листов из нескольких книг в одну.
    #35746441
Pavel55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если честно, то я ничего не понял, кроме ваших поздравлений и пожеланий )

Я написал макрос, посмотрите подойдёт ли он вам.
В архиве 4 файла
1) Общий файл - макрос.xls
2) Файл1.xls - для тестирования макроса
3) Файл2.xls - для тестирования макроса
4) Файл3.xls - для тестирования макроса

В файле "Общий файл - макрос.xls" - записан макрос "Сбор_инфо_из_всех_файлов" , который копирует информацию из всех файлов со всех листов в Общий файл на соответствующие листы. Если в общем файле, случайно не будет листа, который есть в каком-то из файлов, то этот лист будет создан в общем файле.

Потестируйте макрос и сообщите подходит ли он вам или нет. Если нет, то что он делает не так, и как именно он должен делать.


______________________________________________________________
Разрабатываю макросы под заказ.
Email: MacrosForYou собака yandex точка ru
...
Рейтинг: 0 / 0
Объединение листов из нескольких книг в одну.
    #35750043
Kseniya_T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да! да! да! Он работает! Это чудо! Ну, не чудо конечно, а профессиональные знания и умения... Спасибо огромное! Без Вашей помощи мне было бы очень тяжко... Все работает просто замечательно! Вы действительно мне очень помогли! Единственное к чему можно "придраться" - так это к тому, что отсутствующие в Примере листы в общем файле создаются в обратной последовательности. Т.е. самый последний лист из файлов для сбора информации, в общем файле почему-то становится первым, предпоследний вторым, и так далее... а потом идут листы из Примера. Но это на самом деле уже совершенно не важно, важно, что информация консолидируется в один файл из множества так, как нужно.
Спасибо!
...
Рейтинг: 0 / 0
Объединение листов из нескольких книг в одну.
    #35774724
masjanja80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pavel55, помогите, пожалуйста, вот в таком деле...
Задача примерно такая же, но книги из которых надо обрабатывать материал лежат в разнах папках. Тот код, который разбирался в этой теме подходит для решения проблемы, но... как его исправить с учетом разных папок? вот эта строчка: "iPath = BazaWb.Path & "\"". Я с VBA столкнулась недавно и никак не могу сообразить как указывается путь... Документы лежат на одном диске, в одной папке, но в разных подпапках.
Заренее спасибо...
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Объединение листов из нескольких книг в одну.
    #37355823
Фотография -O_o-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за примеры! Очень помогло!!!!
...
Рейтинг: 0 / 0
Объединение листов из нескольких книг в одну.
    #37356749
-Rama-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
от [quot Pavel55] "Потестируйте макрос и сообщите подходит ли он вам или нет. Если нет, то что он делает не так, и как именно он должен делать."


Как собрать с расширением .xlsx ?
Так работает iTempFileName = Dir(iPath & "*.xls")
Так не работает iTempFileName = Dir(iPath & "*.xls*")
...
Рейтинг: 0 / 0
Объединение листов из нескольких книг в одну.
    #37358145
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-Rama-Как собрать с расширением .xlsx ?наверно так: iTempFileName = Dir(iPath & "*.xlsx")
...
Рейтинг: 0 / 0
Объединение листов из нескольких книг в одну.
    #37358414
-Rama-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Djon Player-Rama-Как собрать с расширением .xlsx ?наверно так: iTempFileName = Dir(iPath & "*.xlsx")

А если есть файл и .xlsx и .xls ?
...
Рейтинг: 0 / 0
Объединение листов из нескольких книг в одну.
    #37358568
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-Rama-Djon Playerпропущено...
наверно так: iTempFileName = Dir(iPath & "*.xlsx")

А если есть файл и .xlsx и .xls ?код макросов приведенных выше я не изучал, поэтому могу лишь показать как в принципе перебрать весь список файлов соответствующих нужной маске, в нужной директории, например в корне диска C:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Sub main()
 iPath="C:\"

 iTempFileName = Dir(iPath & "*.xls?")
 Do While iTempFileName <> ""
   MsgBox iTempFileName
   iTempFileName = Dir()
 Loop

End Sub

Вместо знака ? можно так-же и * поставить.
Чтобы отсеять файлы с похожими расширениями, но не совсем такими, какие нам надо, можно ещё дополнительно проверять совпадение расширения с нужным значением.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Объединение листов из нескольких книг в одну.
    #39112644
Guest1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pavel55Сложно писать макрос, не видя ваших файлов. Поэтому вам самой придётся корректировать его под свои файлы.
Вот пример макроса, который будет открывать каждый файл и копировать информацию с каждого листа один под другим с разрывом в 2 строки. Каждый лист - отдельный файл со множеством листов


Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
Sub CollectInfo()
Dim BazaWb As Workbook 'книга с макросом (общий файл)
Dim BazaSht As Worksheet 'лист в общем файле куда будем копировать
Dim iTempFileName As String 'имя поочерёдно открываемого файла
Dim iPath As String 'путь к папке, где лежат все файлы
Dim iLastRowBaza As Long 'последняя заполненная строка в общем файле
Dim iLastRowTempWb As Long 'последняя заполненная строка в по-очерёдно открываемом файле
Dim iNumFiles As Long 'количество открываемых файлов
Dim TempSht As Worksheet 'каждый лист в открываемых файлах

    If MsgBox("Скопировать информацию из всех файлов в текущей папке в данный файл?", vbOKCancel + vbQuestion, _
        "Копирование инфо") = vbCancel Then Exit Sub
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
        .Calculation = xlManual
        .ShowWindowsInTaskbar = False
        Set BazaWb = ThisWorkbook
        iPath = BazaWb.Path & "\"
        iTempFileName = Dir(iPath & "*.xls")
        Do While iTempFileName <> ""
            If iTempFileName <> BazaWb.Name Then
                Set BazaSht = BazaWb.Sheets.Add
                On Error Resume Next
                BazaWb.Sheets(Left(iTempFileName, Len(iTempFileName) - 4)).Delete
                On Error GoTo 0
                BazaSht.Name = Left(iTempFileName, Len(iTempFileName) - 4)
                With .Workbooks.Open _
                     (Filename:=iPath & iTempFileName, UpdateLinks:=False, ReadOnly:=True)
                    iNumFiles = iNumFiles + 1
                    For Each TempSht In .Worksheets
                        iLastRowBaza = BazaSht.Cells(Rows.Count, 1).End(xlUp).Row + 3
                        With TempSht
                            iLastRowTempWb = .Cells(Rows.Count, 1).End(xlUp).Row
                            'копируем диапазон со столбца А до АС включительно
                            .Range(.Cells(1, 1), .Cells(iLastRowTempWb, "AC")).Copy Destination:=BazaSht.Cells(iLastRowBaza, 1)
                        End With
                    Next
                    .Close saveChanges:=False
                    BazaSht.Rows("1:3").Delete
                End With
            End If
            iTempFileName = Dir
        Loop
        .Calculation = xlAutomatic
        .ShowWindowsInTaskbar = True
        .DisplayAlerts = True
        .ScreenUpdating = True
    End With
    MsgBox "Информация скопирована из " & iNumFiles & " файлов!", vbInformation, "Конец"
End Sub




а как убрать разрывы между вставляемыми листами?
попробовала заккомментировать строку iLastRowBaza = BazaSht.Cells(Rows.Count, 1).End(xlUp).Row + 3
выдаёт ошибку
спасибо
...
Рейтинг: 0 / 0
Объединение листов из нескольких книг в одну.
    #39112769
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Guest1, замените +3 на +1
...
Рейтинг: 0 / 0
Объединение листов из нескольких книг в одну.
    #39112882
Guest1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Казанский,

+1 не помогло.


Задача такая:
есть 3 файла одной структуры, в каждом 1 лист.
Надо скопировать эти 3 листа из 3-х файлов на 1 лист (идеально шапку оставить только у первого файла).
То есть в результате должно быть 1 шапка и под ней строки из 3-х файлов.

запускаю
1) модуль CollectInfo() - copy все листы в один файл
2) модуль Copy_f_sad1() - copy всё на один лист - образуются между частями 3 пустые строки, мне надо чтобы их не было.

Причём проверено, что они образуются после запуска модуля CollectInfo()

Помогите, пожалуйста, откорректировать CollectInfo(), чтобы 3 пустые строки при объединении на один лист не формировались.
Файлы во вложении
Модуль в файле exportЧ1.xlsm

Спасибо
...
Рейтинг: 0 / 0
Объединение листов из нескольких книг в одну.
    #39113285
Guest1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получилось, делюсь .... программа во вложении.
Условие задачи в моём предыдущем сообщении.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Объединение листов из нескольких книг в одну.
    #39747491
overvilko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
собираю данные из нескольких однотипных файлов в одну таблицу таким макросом
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Sub RECALK_RD()
F_Path = "'D:\14f2018\[f_14f_MO_22018_"
For Each C In Selection
Text = C.Text
If Text Like "" Then GoTo L1

C(1, 2).Formula = "=" + F_Path + Text + "]Лист 1'!$AV$36"
  C(1, 3).Formula = "=" + F_Path + Text + "]Раздел 2'!$C$6"

  C(1, 5).Formula = "=" + F_Path + Text + "]Раздел 2'!$C$7"

   C(1, 7).Formula = "=" + F_Path + Text + "]Раздел 2'!$C$10"
    C(1, 8).Formula = "=" + F_Path + Text + "]Раздел 2'!$C$14"
    
     C(1, 9).Formula = "=" + F_Path + Text + "]Раздел 3'!$C$8"
      C(1, 10).Formula = "=" + F_Path + Text + "]Раздел 3'!$D$8"
       C(1, 11).Formula = "=" + F_Path + Text + "]Раздел 3'!$E$8"
        C(1, 12).Formula = "=" + F_Path + Text + "]Раздел 3'!$C$39"
L1:
Next
End Sub


имя файла файла представляет собой тип отчета "f_14f_MO_" , квартал и год "22018" , код организации его для макроса я выделяю в итоговой таблице

можете подсказать как сделать что бы часть квартал и год запрашивалась бы при запуске макроса или бралась бы из какой нибудь ячейки в итоговом файле
...
Рейтинг: 0 / 0
Объединение листов из нескольких книг в одну.
    #39747518
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
overvilkoзапрашивалась бы при запуске макросаInputBox
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Объединение листов из нескольких книг в одну.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]