Сбор данных из разных файлов в один - 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

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


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

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

12   голосов , оценка 4.25 из 5
Похожие ответы