Прошу помощи! Есть исходный файл (Книга1) разосланый разным людям для заполнения по своей зоне ответственности. Есть полученные от них файлы (Книга2, 3, 4) с заполненными данными. Необходимо автоматизировать сведение данных с заполненных таблиц в одну. К-во строк и столбцов одинаково (во вложении все наглядно). В примере, всего, 15 строк и 3 заполненных файла, а мне нужно свести более 1200 строк из 14 файлов.
Прошу помощи! Есть исходный файл (Книга1) разосланый разным людям для заполнения по своей зоне ответственности. Есть полученные от них файлы (Книга2, 3, 4) с заполненными данными. Необходимо автоматизировать сведение данных с заполненных таблиц в одну. К-во строк и столбцов одинаково (во вложении все наглядно). В примере, всего, 15 строк и 3 заполненных файла, а мне нужно свести более 1200 строк из 14 файлов.Aleksandr_Kargapolov
Файлы, которые приходят от сотрудников, нужно поместить в одну папку. В этой папке не должно быть других xlsx-файлов, в том числе и файла, в котором будет делаться консолидация. Перед запуском макроса откройте файл, в котором будет консолидация. Запустите макрос и выберите папку с файлами, которые пришли от сотрудников. Макрос ищет последнюю строку на активном листе по столбцу "C". Макрос работает со столбцами H:N. Макрос делает действия: копирует в пришедшем файле фрагмет H2:N & последняя строка, затем делает действия, аналогичные этому: вкладка "Главная" - низ кнопки "Вставить" - Специальная вставка - радиокнопка "Значения" - флажок "Пропускать пустые ячейки".
[vba]
Код
Sub Консолидация()
Dim strPath As String, strFileName As String Dim shSrc As Worksheet, shAct As Worksheet Dim lr As Long
With Application.FileDialog(msoFileDialogFolderPicker) If .Show = 0 Then Exit Sub End If strPath = .SelectedItems(1) End With
Application.ScreenUpdating = False Set shAct = ActiveSheet lr = shAct.Cells(shAct.Rows.Count, "C").End(xlUp).Row strFileName = Dir(strPath & "\*.xlsx") Do While strFileName <> "" Set shSrc = Workbooks.Open(Filename:=strPath & "\" & strFileName, ReadOnly:=True).Worksheets(1) shSrc.Range("H2:N" & lr).Copy shAct.Range("H2").PasteSpecial Paste:=xlPasteValues, SkipBlanks:=True shSrc.Parent.Close SaveChanges:=False strFileName = Dir() Loop Application.ScreenUpdating = True MsgBox "Готово!", vbInformation
End Sub
[/vba]
Файлы, которые приходят от сотрудников, нужно поместить в одну папку. В этой папке не должно быть других xlsx-файлов, в том числе и файла, в котором будет делаться консолидация. Перед запуском макроса откройте файл, в котором будет консолидация. Запустите макрос и выберите папку с файлами, которые пришли от сотрудников. Макрос ищет последнюю строку на активном листе по столбцу "C". Макрос работает со столбцами H:N. Макрос делает действия: копирует в пришедшем файле фрагмет H2:N & последняя строка, затем делает действия, аналогичные этому: вкладка "Главная" - низ кнопки "Вставить" - Специальная вставка - радиокнопка "Значения" - флажок "Пропускать пустые ячейки".
[vba]
Код
Sub Консолидация()
Dim strPath As String, strFileName As String Dim shSrc As Worksheet, shAct As Worksheet Dim lr As Long
With Application.FileDialog(msoFileDialogFolderPicker) If .Show = 0 Then Exit Sub End If strPath = .SelectedItems(1) End With
Application.ScreenUpdating = False Set shAct = ActiveSheet lr = shAct.Cells(shAct.Rows.Count, "C").End(xlUp).Row strFileName = Dir(strPath & "\*.xlsx") Do While strFileName <> "" Set shSrc = Workbooks.Open(Filename:=strPath & "\" & strFileName, ReadOnly:=True).Worksheets(1) shSrc.Range("H2:N" & lr).Copy shAct.Range("H2").PasteSpecial Paste:=xlPasteValues, SkipBlanks:=True shSrc.Parent.Close SaveChanges:=False strFileName = Dir() Loop Application.ScreenUpdating = True MsgBox "Готово!", vbInformation
Спасибо!!! Макрос работает. Попробовал "Специальная вставка". Оказывается, все просто. А я уже всякие ВПР и ЕПУСТО перелопатил, аж мозг вскипел.
Спасибо!!! Макрос работает. Попробовал "Специальная вставка". Оказывается, все просто. А я уже всякие ВПР и ЕПУСТО перелопатил, аж мозг вскипел. Aleksandr_Kargapolov