Загрузка данных


Sub MergeExcelFiles()
    Dim FolderPath As String
    Dim Filename As String
    Dim Wb As Workbook
    Dim DestSheet As Worksheet
    Dim LastRow As Long
    
    ' Выбор папки с файлами
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Выберите папку с файлами Excel"
        .Show
        If .SelectedItems.Count = 0 Then Exit Sub
        FolderPath = .SelectedItems(1) & "\"
    End With
    
    ' Ускорение работы, отключение лишнего
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    
    Set DestSheet = ThisWorkbook.Sheets(1)
    DestSheet.Cells.Clear ' Очищаем лист перед началом
    
    Filename = Dir(FolderPath & "*.xls*") ' Подойдет для .xls и .xlsx
    
    While Filename <> ""
        Set Wb = Workbooks.Open(FolderPath & Filename, ReadOnly:=True)
        
        ' Определяем, есть ли уже данные в нашей книге
        If DestSheet.Range("A1").Value = "" Then
            ' Первый файл копируем полностью (с шапкой)
            Wb.Sheets(1).UsedRange.Copy DestSheet.Range("A1")
        Else
            ' Последующие файлы копируем без шапки (начиная со второй строки)
            LastRow = DestSheet.Cells(DestSheet.Rows.Count, 1).End(xlUp).Row + 1
            With Wb.Sheets(1).UsedRange
                If .Rows.Count > 1 Then
                    .Offset(1, 0).Resize(.Rows.Count - 1).Copy DestSheet.Cells(LastRow, 1)
                End If
            End With
        End If
        
        Wb.Close False ' Закрываем файл без сохранения
        Filename = Dir ' Переход к следующему файлу
    Wend
    
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    MsgBox "Готово! Все файлы объединены."
End Sub