Как объединить все листы Excel в одну таблицу

Собираем Январь, Февраль, Март и другие одинаковые листы в общий реестр.

Как объединить все листы Excel в одну таблицу

Короткий ответ: Если в одной книге десятки одинаково устроенных листов, копировать их вручную не нужно. Для стабильной структуры подходит Power Query, а для простой локальной книги — короткий VBA-макрос.

Что получится

На листе Свод будут собраны строки со всех рабочих листов, а в отдельном столбце будет имя исходного листа.

Как объединить все листы Excel в одну таблицу

Исходные данные

Листы Январь, Февраль, Март имеют одинаковые столбцы:

ДатаЗаказСумма
05.01.2026A-0011200
06.01.2026A-002900
Исходные данные для: Как объединить все листы Excel в одну таблицу

Способ 1

Если данные на каждом листе оформлены как Excel-таблицы, загрузите их в Power Query и выполните Добавление запросов. Это удобно, когда данные обновляются часто.

Способ 2

Для одинаковых листов можно использовать VBA:

Option Explicit

Sub MergeSheets()
    Dim ws As Worksheet, dst As Worksheet
    Dim lastRow As Long, dstRow As Long, lastCol As Long

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    On Error GoTo ErrHandler

    Set dst = ThisWorkbook.Worksheets("Свод")
    dst.Cells.Clear
    dstRow = 1

    For Each ws In ThisWorkbook.Worksheets
        If ws.Name <> dst.Name Then
            lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
            lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column

            If lastRow >= 2 Then
                If dstRow = 1 Then
                    ws.Range(ws.Cells(1, 1), ws.Cells(1, lastCol)).Copy dst.Cells(1, 1)
                    dst.Cells(1, lastCol + 1).Value = "Источник"
                    dstRow = 2
                End If

                ws.Range(ws.Cells(2, 1), ws.Cells(lastRow, lastCol)).Copy dst.Cells(dstRow, 1)
                dst.Range(dst.Cells(dstRow, lastCol + 1), _
                          dst.Cells(dstRow + lastRow - 2, lastCol + 1)).Value = ws.Name
                dstRow = dstRow + lastRow - 1
            End If
        End If
    Next ws

CleanExit:
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    Exit Sub

ErrHandler:
    MsgBox "Ошибка: " & Err.Description, vbExclamation
    Resume CleanExit
End Sub

Автоматизация

Для 2–3 листов ручное копирование иногда быстрее. Макрос или Power Query оправданы, когда листов много или сборку нужно повторять.

Как объединить все листы Excel в одну таблицу

Типичные ошибки

  • На листах разные заголовки.
  • Есть пустые строки внутри данных.
  • Макрос захватывает служебные листы.
  • Лист Свод отсутствует.
  • Используются объединённые ячейки и многострочные шапки.

Скачать пример

example.xlsm с листами Январь, Февраль, Март, Свод и макросом MergeSheets.

Когда лучше автоматизировать

Автоматизация нужна, когда новые листы появляются каждый период и свод приходится пересобирать.

Если у вас такая же задача, но таблица отличается, файлов много или процесс приходится повторять регулярно — можно автоматизировать под ваш файл.

Похожие материалы

  • Как собрать данные из нескольких Excel-файлов в один
  • Как объединить две таблицы Excel в одну по совпадающему значению
  • Как сравнить две таблицы Excel и найти различия
  • Как создать десятки договоров, актов или писем Word из Excel

Нужно автоматизировать похожую задачу?

Пришлите пример Excel или Word и описание результата — оценю подходящий вариант.