Сбор данных из разных файлов в один - VBA
Формулировка задачи:
Добрый день. Стоит задача собирать данные из нескольких файлов с одинаковой структурой в один, имеющий аналогичную структуру. Имена файлов имеют одинаковое правило - 2016_07_ОП_*наименование*, то есть год, месяц, ОП-название формы, далее идет наименование отдела. Собирать данные нужно с конкретного листа и вставлять в файл на лист, с таким же наименованием (именовать лист нужно автоматически). Так же в сборочный файл нужно добавить две колонки - Год и Месяц. Брать данные для их заполнения нужно из имен файлов, то есть в данном случае всем скопированным строкам нужно поставить год - 2016 и месяц - 07.
Есть вот такой макрос, найденный на этом форуме (Извините за неудобства. Вставляю со всеми отступами, но они почему-то пропадают):
Но этот макрос копирует все листы. Помогите, пожалуйста, его поправить под необходимый мне функционал. Спасибо.
Решение задачи: «Сбор данных из разных файлов в один»
textual
Листинг программы
Sub Собрать_данные_Бюджетов() ' Макрос собирает в новой книге данные из заданного листа xls файлов с нужным шаблоном имени выбранной папки. Const ImyaListaSbora = "Бюджет расходов и платежей" Const FirstRow_Cel& = 2 ' Номер строки начала построения Const FirstRow& = 2 ' Номер строки начала сбора данных (ниже шапки) Dim i&, j&, k&, LastRow&, Gog, Mes, Metka$, A Dim ShCel As Worksheet, Sh As Worksheet, wb_Tek As Workbook Dim MyPath$, MyFileName$, MyFullName$ k = FirstRow_Cel - 1 With Application.FileDialog(msoFileDialogFolderPicker) .Title = "Укажите рабочую папку": .Show If .SelectedItems.Count = 0 Then Exit Sub MyPath = .SelectedItems(1) & "" End With If Right$(MyPath, 1) <> "" Then MyPath = MyPath & "" Set ShCel = ActiveWorkbook.Worksheets(ImyaListaSbora) i = InStr(1, ActiveWorkbook.Name, ".xls", vbTextCompare) If i > 0 Then Metka = Mid(ActiveWorkbook.Name, 9, i - 9) 'ShCel.Name = ImyaListaSbora ShCel.UsedRange.Offset(FirstRow_Cel - 1, 0).Clear MyFileName = Dir(MyPath & "????_??_*_*.xls*") Do Until MyFileName = "" Gog = Left(MyFileName, 4) Mes = Mid(MyFileName, 6, 2) MyFullName = MyPath & MyFileName Set wb_Tek = Workbooks.Open(FileName:=MyFullName, UpdateLinks:=0, ReadOnly:=True) With wb_Tek.Worksheets(ImyaListaSbora) .AutoFilterMode = False LastRow = .Cells(.Rows.Count, 3).End(xlUp).Row A = Range(.Cells(FirstRow, 1), .Cells(LastRow, 11)).FormulaR1C1 For i = 1 To UBound(A) If A(i, 1) = Metka Then k = k + 1 With ShCel For j = 1 To 11 .Cells(k, j).FormulaR1C1 = A(i, j) Next .Cells(k, 12) = Gog .Cells(k, 13) = Mes End With End If Next i End With wb_Tek.Close SaveChanges:=False MyFileName = Dir Loop With ShCel .[L1] = "Год" .[m1] = "Месяц" .Range("A1:M" & k).Borders.LineStyle = xlContinuous .Cells(k, 1).Select End With End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д