Страницы: 1
RSS
Создание свода из нескольких файлов с предварительной обработкой каждого
 
Добрый день!

Уважаемые форумчане! Прошу по возможности помочь с готовым решением по созданию реестра из множества файлов.

Исходные данные: папка в которой лежит плюс/минус 600 файлов excel, каждый весит около 20КБ и имеет плюс/минус 80 строк. Образец части файла (B2:E11) приложен.
Задача по каждому из файлов в папке:
1. открыть файл, удалить фильтры, если они есть.
2. в столбце "F" в каждой ячейке проставить название блока из столбца "B" в котором ячейки объединены. (в примере уже проставил вручную)
3. в столбце "G" в каждой ячейке проставить имя файла (в примере уже проставил вручную)
4. скопировать все данные из ячеек диапазона "C:G" начиная с ячейки "С4"
5. вставить скопированные данные в общий файл подряд, друг за другом
Изменено: vikttur - 16.08.2021 16:35:49
 
ТУТ читайте, может подойдет
 
Спасибо, попробую! Только свести по указанной инструкции я в теории наверное смогу, а вот настроить предварительную обработку каждого файла в части добавления данных, не уверен(. В любом случае спасибо большое за подсказку, буду пробовать!
Изменено: vikttur - 16.08.2021 16:36:23
 
Данные могут быть добавлены в свод (столбец В: преобразование - заполнить вниз).
А в исходных файлах эта информация зачем-то нужна сама по себе?
 
del
Изменено: buchlotnik - 21.08.2021 17:06:56
Соблюдение правил форума не освобождает от модераторского произвола
 
Цитата
Xel написал: ... в исходных файлах эта информация зачем-то нужна сама по себе?
Нет, изменения в исходных после копирования из них данных, сохранять не нужно.
Изменено: vikttur - 16.08.2021 16:48:01
 
Код
Option Explicit

Sub Main()
    Dim aFiles As Variant
    aFiles = ShowFileDialog()
    
    If Not IsEmpty(aFiles) Then
        Application.EnableEvents = False
        Dim Application_Calculation As Long
        Application_Calculation = Application.Calculation
        Application.Calculation = xlCalculationManual
        Application.ScreenUpdating = False
    
        Dim wbOut As Workbook
        Set wbOut = Workbooks.Add(1)
        Dim rOut As Range
        Set rOut = wbOut.Sheets(1).Cells(1, 1)
        
        Dim vFile As Variant
        For Each vFile In aFiles
            JobvFile vFile, rOut
        Next
        
        wbOut.Saved = True
        Application.EnableEvents = False
        Application.Calculation = Application_Calculation
        Application.ScreenUpdating = True
    
    End If
End Sub

Sub JobvFile(ByVal sFile As String, rOut As Range)
    Dim y As Long
    Dim arr As Variant
    
    Dim wb As Workbook
    Set wb = Workbooks.Open(sFile, False, True)
    
    With wb.Sheets(1)
        y = .Cells(.Rows.Count, 3).End(xlUp).Row
        If y > 4 Then
            arr = .Range(.Cells(4, 1), .Cells(y, "G"))
        End If
    End With
    
    Dim sName As String
    sName = wb.Name
    sName = Left(sName, InStrRev(sName, ".") - 1)
    wb.Close False
    
    If Not IsEmpty(arr) Then
        Dim s As String
        For y = 1 To UBound(arr, 1)
            If arr(y, 2) <> "" Then s = arr(y, 2)
            arr(y, 6) = s
            arr(y, 7) = sName
        Next
        rOut.Resize(UBound(arr, 1), UBound(arr, 2)) = arr
        Set rOut = rOut.Offset(UBound(arr, 1))
    End If
End Sub

Function ShowFileDialog() As Variant
'www.excel-vba.ru
    Dim arr As Variant
    Dim oFD As FileDialog
    Dim lf As Long
    'назначаем переменной ссылку на экземпляр диалога
    Set oFD = Application.FileDialog(msoFileDialogFilePicker)
    With oFD 'используем короткое обращение к объекту
    'так же можно без oFD
    'With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = True
        .Title = "Выбрать файлы отчетов" 'заголовок окна диалога
        .Filters.Clear 'очищаем установленные ранее типы файлов
        .Filters.Add "Excel files", "*.xls*;*.xla*", 1 'устанавливаем возможность выбора только файлов Excel
        '.Filters.Add "Text files", "*.txt", 2 'добавляем возможность выбора текстовых файлов
        .FilterIndex = 1 'устанавливаем тип файлов по умолчанию - Text files(Текстовые файлы)
        .InitialFileName = ThisWorkbook.Path 'назначаем папку отображения и имя файла по умолчанию
        .InitialView = msoFileDialogViewDetails 'вид диалогового окна(доступно 9 вариантов)
        If oFD.Show = 0 Then Exit Function 'показывает диалог
        ReDim arr(1 To .SelectedItems.Count)
        'цикл по коллекции выбранных в диалоге файлов
        For lf = 1 To .SelectedItems.Count
            arr(lf) = .SelectedItems(lf)
        Next
    End With
    ShowFileDialog = arr
End Function
 
buchlotnik, Спасибо!!!
 
МатросНаЗебре, Спасибо!!! Сажусь раскуривать))
 
Цитата
Василий Б написал: Нет, изменения в исходных после копирования из них данных, сохранять не нужно.
Тогда метод по ссылке - вам "то, что доктор прописал", power query такие задачи решает просто шлепанием по кнопкам за 5 минут.
 
Xel, понял, спасибо!!
Страницы: 1
Наверх