Сведение данных из разных книг в одну таблицу

Иван Корнев·16.05.2026·5 мин

Объединить несколько Excel-файлов в один быстрее и надежнее всего с помощью инструмента Power Query (встроен в Excel 2016, 2019, 2021 и Microsoft 365). Он позволяет автоматически подтягивать данные из всех файлов одной папки, даже если их структура немного меняется, и обновлять сводную таблицу одной кнопкой. Для разовых задач подойдет простое копирование листов, а для сложных сценариев — макросы VBA.

Выбор метода зависит от версии Excel, количества файлов и частоты обновления данных. Ниже рассмотрены три основных способа: от самого современного до классического.

Краткий ответ: Если у вас Excel 2016 или новее, используйте вкладку «Данные» → «Получить данные» → «Из файла» → «Из папки». Это самый быстрый способ собрать данные без программирования.

Способ 1: Power Query (Рекомендуемый метод)

Этот метод идеален, если у вас много файлов с одинаковой структурой (например, ежемесячные отчеты продаж), и вы хотите регулярно их обновлять.

Подготовка файлов

  1. Создайте отдельную папку на компьютере.
  2. Поместите в нее все Excel-файлы, которые нужно объединить.
  3. Убедитесь, что данные в файлах имеют одинаковые заголовки столбцов и находятся на первых листах.

Пошаговая инструкция (Excel 2016, 2019, 2021, 365)

  1. Откройте пустую книгу Excel.
  2. Перейдите на вкладку Данные (Data).
  3. Нажмите Получить данные (Get Data) → Из файлаИз папки.
  4. Укажите путь к папке с файлами и нажмите Открыть.
  5. В появившемся окне предпросмотра нажмите кнопку Преобразовать данные (Transform Data) или Объединить (Combine).
    • Если нажали «Объединить»: Выберите лист, который содержит данные, и нажмите ОК. Power Query сам соберет все файлы.
    • Если нажали «Преобразовать данные»: Откроется редактор Power Query. Вам может потребоваться развернуть столбец Content (нажав на иконку с двумя стрелками в заголовке столбца), чтобы выбрать нужные данные.
  6. В редакторе проверьте типы данных (числа, даты, текст). При необходимости удалите лишние столбцы (например, системный столбец Name, если имя файла не нужно в отчете).
  7. Нажмите кнопку Закрыть и загрузить (Close & Load) в левом верхнем углу.

Результатом будет новая таблица на листе Excel, содержащая данные из всех файлов.

Как обновить данные: Когда в папку добавятся новые файлы или изменятся старые, просто нажмите правой кнопкой мыши на полученную таблицу и выберите Обновить. Excel сам перечитает все файлы из папки.

Для Excel 2010 и 2013

В этих версиях Power Query не встроен по умолчанию. Необходимо скачать и установить надстройку Microsoft Power Query for Excel с официального сайта Microsoft. После установки алгоритм действий аналогичен: вкладка Power QueryИз файлаИз папки.

Способ 2: Перемещение и копирование листов (Для разовых задач)

Если файлов немного (3–5 штук) и объединять их нужно один раз, проще всего скопировать листы вручную. Этот метод сохраняет форматирование и формулы, но не подходит для автоматического сбора данных в одну таблицу.

  1. Откройте все файлы, которые нужно объединить, и один пустой файл-приемник.
  2. В исходном файле кликните правой кнопкой мыши по ярлычку листа, который нужно перенести.
  3. Выберите Переместить или скопировать (Move or Copy).
  4. В поле В книгу (To book) выберите файл-приемник.
  5. Поставьте галочку Создать копию (Create a copy), если хотите оставить оригинал нетронутым.
  6. Нажмите ОК.

Повторите для всех нужных листов.

Минусы метода:

  • Данные остаются на разных листах, а не в одной общей таблице.
  • При большом количестве файлов процесс становится рутинным.
  • Сложно анализировать данные сводными таблицами, если они разбросаны по разным листам.

Способ 3: Макрос VBA (Для продвинутых пользователей)

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

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. В меню выберите InsertModule.
  3. Вставьте следующий код:
Sub MergeExcelFiles()
    Dim FolderPath As String
    Dim Filename As String
    Dim Sheet As Worksheet
    Dim LastRow As Long
    Dim DestSheet As Worksheet
    Dim WB As Workbook
    
    ' Настройка целевого листа
    Set DestSheet = ThisWorkbook.Sheets(1)
    
    ' Выбор папки
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Выберите папку с файлами Excel"
        If .Show = -1 Then
            FolderPath = .SelectedItems(1) & "\"
        Else
            Exit Sub
        End If
    End With
    
    Application.ScreenUpdating = False
    Filename = Dir(FolderPath & "*.xls*")
    
    Do While Filename <> ""
        If Filename <> ThisWorkbook.Name Then
            Set WB = Workbooks.Open(FolderPath & Filename)
            
            ' Копируем данные с первого листа
            ' Предполагаем, что заголовки уже есть в DestSheet, поэтому копируем со второй строки
            ' Если нужно копировать всё, включая заголовки, измените логику
            
            LastRow = DestSheet.Cells(DestSheet.Rows.Count, 1).End(xlUp).Row + 1
            
            ' Копируем используемый диапазон
            WB.Sheets(1).UsedRange.Copy Destination:=DestSheet.Cells(LastRow, 1)
            
            WB.Close SaveChanges:=False
        End If
        Filename = Dir
    Loop
    
    Application.ScreenUpdating = True
    MsgBox "Файлы успешно объединены!", vbInformation
End Sub
  1. Закройте редактор VBA.
  2. Запустите макрос через вкладку РазработчикМакросыMergeExcelFiles.

Важно: Перед запуском макроса сохраните книгу как Книга Excel с поддержкой макросов (.xlsm). Убедитесь, что во всех исходных файлах данные начинаются с ячейки A1 и имеют одинаковую структуру столбцов.

Сравнение методов объединения

МетодВерсии ExcelСложность настройкиАвтоматическое обновлениеЛучше всего подходит для
Power Query2010+ (с надстройкой), 2016+ (встроено)СредняяДа (кнопка «Обновить»)Регулярной отчетности, больших объемов данных
Копирование листовВсе версииНизкаяНетРазовых задач, малого числа файлов
Макрос VBAВсе версии (с поддержкой макросов)ВысокаяНет (нужен повторный запуск)Специфических задач, где нужен полный контроль

Частые ошибки при объединении

  1. Разная структура столбцов. Если в одном файле столбец «Дата» называется «Date», а в другом «Время сделки», Power Query создаст два разных столбца.
    • Решение: Приведите заголовки всех файлов к единому виду перед объединением.
  2. Лишние строки и итоги в исходных файлах. Часто в конце отчетов есть строки «Итого» или пустые строки.
    • Решение: В Power Query используйте фильтр, чтобы отсечь пустые значения или строки со словом «Итого».
  3. Форматирование чисел как текста. При импорте числа могут превратиться в текст (зеленый уголок в ячейке).
    • Решение: В редакторе Power Query явно задайте тип данных «Число» или «Десятичное число» для соответствующих столбцов.
  4. Блокировка файлов. Если один из исходных файлов открыт в режиме «Только для чтения» или заблокирован другим пользователем, импорт может завершиться ошибкой.
    • Решение: Закройте все исходные файлы перед обновлением запроса.

FAQ

Можно ли объединить файлы, если они лежат в разных папках? Да, в Power Query можно добавить несколько источников папок или использовать параметр «Из веб-источника», если файлы доступны по сети. Однако проще всего собрать все нужные файлы в одну директорию.

Что делать, если в файлах разное количество столбцов? Power Query по умолчанию сопоставляет столбцы по именам. Если в каком-то файле столбца нет, в итоговой таблице для этих строк будут стоять значения null (пусто). Это нормальное поведение.

Как объединить только определенные листы из книг? В редакторе Power Query на этапе преобразования данных можно отфильтровать список листов. При шаге «Объединить» выберите опцию выбора конкретного листа по имени, а не «Первый лист».

Почему макрос VBA копирует данные с ошибками? Проверьте, нет ли в исходных файлах объединенных ячеек или скрытых строк. Макрос копирует UsedRange (используемый диапазон), который может включать пустые ячейки, если ранее там были данные. Очистите лишнее в исходниках или доработайте код для точного определения последней строки.