VBA EXCEL: Собрать кучу файлов в один

Узнай цену своей работы

Формулировка задачи:

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

Решение задачи: «VBA EXCEL: Собрать кучу файлов в один»

textual
Листинг программы
  1. Sub Собрать_данные_из_xls_файлов()
  2.     ' Макрос создает книгу и последовательно вставляет на одноименные листы
  3.    ' данные из всех xls файлов заданной директории начиная со строки FRow.
  4.    Const FRow& = 2                ' Номер строки начала сбора данных (ниже шапки)
  5.    Const Sborka$ = "Сборка.xls"   ' Имя сборочного файла
  6.    Dim FCol&, LCol&               ' Переменные номеров первого и последнего столбца для сбора данных
  7.    Dim LRow&, LRow_Cel&
  8.     Dim wb_Cel As Workbook, wb_Tek As Workbook
  9.     Dim Sh_Cel As Worksheet, Sh_Tek As Worksheet
  10.     Dim MyPath$, MyFileName$, MyFulName$
  11.     Dim Uslovie1 As Boolean
  12.    
  13.     ' Выбор папки
  14.    With Application.FileDialog(msoFileDialogFolderPicker)
  15.         .Title = "Укажите рабочую папку": .Show
  16.         If .SelectedItems.Count = 0 Then Exit Sub
  17.         MyPath = .SelectedItems(1) & "\"
  18.     End With
  19.      
  20.        
  21.    
  22.        
  23.     'MyPath = "C:\inbox\Тест Макросаест\"
  24.    ' MyPath = CurDir & "\"
  25.    MyFileName = Dir(MyPath & "*.xls*")
  26.     Uslovie1 = False
  27.     Do Until MyFileName = ""
  28.         If MyFileName <> Sborka Then
  29.             MyFulName = MyPath & MyFileName
  30.             Workbooks.Open Filename:=MyFulName, UpdateLinks:=0
  31.             If Not Uslovie1 Then
  32.                 Set wb_Cel = ActiveWorkbook
  33.                 ActiveWorkbook.SaveAs Filename:=MyPath & Sborka, FileFormat:=xlExcel8, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False
  34.                 Uslovie1 = True
  35.             Else
  36.                 Set wb_Tek = ActiveWorkbook
  37.                 For Each Sh_Cel In wb_Cel.Sheets
  38.                     With Sh_Cel
  39.                         FCol = .UsedRange.Cells(1, 1).Column
  40.                         LCol = .UsedRange.Columns.Count + FCol - 1
  41.                         LRow_Cel = .Cells(.Rows.Count, FCol).End(xlUp).Row + 1
  42.                     End With
  43.                     For Each Sh_Tek In wb_Tek.Sheets
  44.                         If Sh_Tek.Name = Sh_Cel.Name Then
  45.                             With Sh_Tek
  46.                                 LRow = .Cells(.Rows.Count, FCol).End(xlUp).Row
  47.                                 If LRow >= FRow Then
  48.                                     .Range(.Cells(FRow, FCol), .Cells(LRow, LCol)).Copy Sh_Cel.Cells(LRow_Cel, 1)
  49.                                 End If
  50.                             End With
  51.                             With Sh_Cel
  52.                                     Range(.Cells(LRow_Cel , 2+LCol-FCol), .Cells(LRow_Cel+LRow-FRow,  2+LCol-FCol))= MyFulName
  53.                             End With
  54.                         End If
  55.                     Next Sh_Tek
  56.                 Next Sh_Cel
  57.                 Workbooks(MyFileName).Close SaveChanges:=False
  58.             End If
  59.         End If
  60.         MyFileName = Dir
  61.     Loop
  62. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.333 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы