Добавить в корзинуПозвонить
Найти в Дзене
Разборка под кофе

Как собрать 10 разных отчетов Excel в один за пару секунд: готовый макрос автоматизации

Каждый понедельник у тысяч менеджеров, бухгалтеров и маркетологов начинается с персонального ада. Из разных отделов, регионов или от разных коллег прилетают десятки однотипных файлов Excel. Внутри — отчеты за неделю, продажи или остатки на складах. И начинается великая рутина: открыть первый файл, выделить, скопировать, открыть главный файл, вставить в конец. Открыть второй файл... На десятом документе в глазах начинает рябить, а риск случайно пропустить строку или вставить данные не туда возрастает до максимума. Если вам надоело тратить на это утренний кофе и нервы, у меня есть хорошая новость. Этот процесс можно (и нужно) автоматизировать. Ниже — готовый макрос, который сам заглянет во все файлы в папке и соберет их данные в одну аккуратную таблицу. Как устроен этот инструмент? Вам больше не придется открывать файлы вручную. Скрипт работает по следующему алгоритму: Просто скопируйте этот текст целиком. В нем уже прописаны все необходимые комментарии: vba Sub СборщикОтчетовИзПапки(
Оглавление

Каждый понедельник у тысяч менеджеров, бухгалтеров и маркетологов начинается с персонального ада. Из разных отделов, регионов или от разных коллег прилетают десятки однотипных файлов Excel. Внутри — отчеты за неделю, продажи или остатки на складах.

И начинается великая рутина: открыть первый файл, выделить, скопировать, открыть главный файл, вставить в конец. Открыть второй файл... На десятом документе в глазах начинает рябить, а риск случайно пропустить строку или вставить данные не туда возрастает до максимума.

Если вам надоело тратить на это утренний кофе и нервы, у меня есть хорошая новость. Этот процесс можно (и нужно) автоматизировать. Ниже — готовый макрос, который сам заглянет во все файлы в папке и соберет их данные в одну аккуратную таблицу.

Как устроен этот инструмент?

Вам больше не придется открывать файлы вручную. Скрипт работает по следующему алгоритму:

  1. Вы скидываете все нужные отчеты в одну папку на компьютере.
  2. Открываете чистый итоговый файл Excel и запускаете макрос.
  3. Он сам по очереди открывает каждый документ из папки, находит там данные (пропуская шапку таблицы, чтобы она не дублировалась), копирует их, вставляет в ваш итоговый файл и закрывает источник.

Код макроса VBA в Excel для автоматического удаления дубликатов строк и очистки базы данных
Код макроса VBA в Excel для автоматического удаления дубликатов строк и очистки базы данных

Готовый код макроса для копирования

Просто скопируйте этот текст целиком. В нем уже прописаны все необходимые комментарии:

vba

Sub СборщикОтчетовИзПапки()
Dim SummarySheet As Worksheet
Dim FolderPath As String
Dim SelectedFolder As Object
Dim FileName As String
Dim SrcWorkbook As Workbook
Dim SrcSheet As Worksheet
Dim SrcLastRow As Long
Dim DestLastRow As Long
Dim HeaderRows As Integer

' Количество строк шапки в ваших отчетах, которые НЕ нужно повторно копировать
HeaderRows = 1

' Устанавливаем лист, куда будем собирать все данные
Set SummarySheet = ActiveSheet

' Вызываем удобное диалоговое окно для выбора папки с файлами
Set SelectedFolder = Application.FileDialog(msoFileDialogFolderPicker)
With SelectedFolder
.Title = "Выберите папку с отчетами Excel"
.AllowMultiSelect = False
If .Show <> -1 Then Exit Sub ' Если пользователь нажал Отмена — выходим
FolderPath = .SelectedItems(1) & "\"
End With

' Ускоряем работу макроса (отключаем обновление экрана и предупреждения)
Application.ScreenUpdating = False
Application.DisplayAlerts = False

' Ищем первый файл Excel в выбранной папке
FileName = Dir(FolderPath & "*.xl*")

' Запускаем цикл по всем файлам в папке
Do While FileName <> ""
' Проверяем, чтобы макрос случайно не открыл сам себя
If FileName <> ThisWorkbook.Name Then

' Открываем очередной файл с отчетом
Set SrcWorkbook = Workbooks.Open(FolderPath & FileName)
' Берем первый лист открытого файла
Set SrcSheet = SrcWorkbook.Sheets(1)

' Находим последнюю заполненную строку в файле-источнике
SrcLastRow = SrcSheet.Cells(SrcSheet.Rows.Count, "A").End(xlUp).Row

' Если в файле есть данные (строк больше, чем в шапке)
If SrcLastRow > HeaderRows Then
' Находим первую свободную строку в нашем итоговом файле
DestLastRow = SummarySheet.Cells(SummarySheet.Rows.Count, "A").End(xlUp).Row + 1

' Копируем данные без шапки и вставляем в итоговый файл
SrcSheet.Rows((HeaderRows + 1) & ":" & SrcLastRow).Copy _
Destination:=SummarySheet.Rows(DestLastRow)
End If

' Закрываем файл-источник без сохранения изменений
SrcWorkbook.Close SaveChanges:=False
End If

' Переходим к следующему файлу в папке
FileName = Dir
Loop

' Включаем обратно обновление экрана
Application.ScreenUpdating = True
Application.DisplayAlerts = True

' Выводим радостное уведомление
MsgBox "Успех! Все отчеты из папки успешно объединены в один файл.", vbInformation, "Готово"
End Sub

Инструкция: как запустить магию за 1 минуту

Справится любой, даже если вы никогда раньше не видели код:

  1. Создайте на компьютере новую папку (например, на Рабочем столе) и скиньте туда все файлы Excel, которые нужно объединить.
  2. Создайте новый чистый файл Excel, который станет вашим главным отчетом. Оставьте его открытым.
  3. Зажмите комбинацию клавиш ALT + F11 (откроется окно для работы с кодом).
  4. В верхнем меню нажмите Insert -> Module.
  5. В появившееся большое белое окно вставьте скопированный выше код макроса.
  6. Закройте окно с кодом, вернитесь в ваш чистый Excel и нажмите ALT + F8.
  7. Выберите в списке макрос СборщикОтчетовИзПапки и нажмите «Выполнить».
  8. Программа откроет проводник — просто выберите папку, в которую вы сложили все отчеты, и нажмите ОК.

Скрипт замигает на пару секунд и выдаст окно «Успех!». Готово — перед вами лежит идеально собранный отчет, на который раньше уходили часы монотонной работы.

Важный совет: Чтобы макрос отработал идеально, таблицы во всех файлах-источниках должны иметь одинаковую структуру (одинаковый порядок столбцов).

Сохраняйте статью в закладки, чтобы не потерять код, и подписывайтесь на канал — впереди еще много крутых скриптов, которые работают за вас!