Как разделить документ Excel на отдельные файлы: пошаговое руководство

Работа с большими таблицами в Microsoft Excel или Google Sheets часто требует разделения данных на более мелкие файлы. Это может понадобиться для отправки отчетов разным отделам, архивирования информации по периодам или просто для удобства работы с фрагментами данных. Однако ручное копирование каждого листа или диапазона строк отнимает часы — особенно если речь идет о сотнях записей.

Существует несколько способов автоматизировать этот процесс: от встроенных функций Excel до скриптов на VBA и специализированных надстроек. В этой статье мы разберем все актуальные методы, включая нюансы работы с .xlsx, .csv и другими форматами. Особое внимание уделим разделению по уникальным значениям в столбце (например, по номерам заказов или датам) — это самый востребованный сценарий в бизнес-задачах.

Если вы никогда не занимались программированием в Excel, не переживайте: majority методов не требуют знания кода. Для продвинутых пользователей мы подготовили оптимизированные макросы, которые экономят до 90% времени по сравнению с ручной работой.

📊 Как часто вам приходится делить Excel-файлы?
Ежедневно
Раз в неделю
Раз в месяц
Реже
Никогда

1. Разделение по листам: самый простой способ

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

В Excel 2016 и новее есть встроенная функция Разделить книгу, но она скрыта в меню. Вот как ее найти:

  1. Откройте файл и перейдите на любой лист.
  2. Нажмите Файл → Экспорт → Изменить тип файла.
  3. Выберите Другие форматы книги.
  4. В выпадающем списке Сохранить как тип найдите Веб-страница (*.html).
  5. Нажмите Сохранить — Excel предложит сохранить каждый лист как отдельный файл.

⚠️ Внимание: Этот метод создает файлы в формате .html, а не .xlsx. Чтобы конвертировать их обратно, откройте каждый файл в Excel и сохраните как Книга Excel (*.xlsx).

Для Google Sheets процесс еще проще:

  1. Откройте таблицу и выделите нужные листы (удерживая Ctrl).
  2. Кликните правой кнопкой по выделенным вкладкам и выберите Копировать в новую таблицу.
  3. Повторите для каждой группы листов.

2. Разделение по строкам: когда данные в одном листе

Чаще всего пользователям нужно разделить один большой лист на отдельные файлы по уникальному идентификатору (например, номер заказа, ФИО клиента или дата). Здесь поможет фильтрация или Power Query.

Способ 1: Ручная фильтрация + копирование

  • 🔍 Примените фильтр к столбцу с уникальными значениями (например, Номер заказа).
  • 📋 Отфильтруйте данные по первому значению, скопируйте видимые строки в новый файл.
  • 🔄 Повторите для всех уникальных значений.

Способ 2: Power Query (рекомендуется)

  1. Выделите исходные данные и нажмите Данные → Из таблицы/диапазонаExcel 2016+).
  2. В открывшемся редакторе Power Query выберите столбец для группировки (например, Регион).
  3. Нажмите Преобразовать → Группировка и укажите параметры:
ПараметрЗначение
Группировать поСтолбец с уникальными значениями (например, ID клиента)
Новое имя столбцаЛюбое (например, Данные)
ОперацияВсе строки
Агрегировать поВсе столбцы, кроме группировочного

После группировки нажмите Закрыть и загрузить в... и выберите Новая книга. Power Query автоматически создаст отдельные листы для каждой группы. Останется сохранить их как отдельные файлы.

Как автоматизировать сохранение после Power Query?

Используйте этот макрос для экспорта каждого листа в отдельный файл .xlsx:

Sub ExportSheetsToFiles()

Dim ws As Worksheet, wbNew As Workbook

For Each ws In ThisWorkbook.Worksheets

ws.Copy

Set wbNew = ActiveWorkbook

wbNew.SaveAs ThisWorkbook.Path & "\" & ws.Name & ".xlsx"

wbNew.Close False

Next ws

End Sub

3. Разделение с помощью VBA: для больших файлов

Если у вас тысячи строк, ручные методы не подойдут. VBA-макросы справляются с задачей за секунды. Ниже универсальный код для разделения по уникальным значениям в столбце (например, А):

Sub SplitDataByColumn()

Dim ws As Worksheet, rng As Range, cell As Range

Dim dict As Object, key As Variant

Dim newWb As Workbook, newWs As Worksheet

Dim lastRow As Long, colNum As Integer

' Настройки: укажите номер столбца (A=1, B=2...) и последний ряд

colNum = 1 ' Столбец A

lastRow = Cells(Rows.Count, colNum).End(xlUp).Row

Set ws = ActiveSheet

Set rng = ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, Columns.Count).End(xlToLeft))

' Создаем словарь уникальных значений

Set dict = CreateObject("Scripting.Dictionary")

For Each cell In ws.Range(ws.Cells(2, colNum), ws.Cells(lastRow, colNum))

dict(cell.Value) = 1

Next cell

' Создаем папку для результатов

Dim folderPath As String

folderPath = ThisWorkbook.Path & "\SplitResults"

If Dir(folderPath, vbDirectory) = "" Then MkDir folderPath

' Экспортируем данные

For Each key In dict.Keys

ws.AutoFilterMode = False

rng.AutoFilter Field:=colNum, Criteria1:=key

Set newWb = Workbooks.Add

rng.SpecialCells(xlCellTypeVisible).Copy newWb.Sheets(1).Range("A1")

newWb.SaveAs folderPath & "\" & key & ".xlsx"

newWb.Close False

Next key

ws.AutoFilterMode = False

MsgBox "Готово! Файлы сохранены в " & folderPath, vbInformation

End Sub

🔹 Как использовать:

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте код в новый модуль (Insert → Module).
  3. Измените colNum = 1 на номер вашего столбца (например, 3 для столбца C).
  4. Запустите макрос кнопкой F5.

Изменить номер столбца в коде|Сохранить исходный файл|Закрыть все лишние книги Excel|Проверить свободное место на диске

-->

⚠️ Внимание: Макрос создаст папку SplitResults в той же директории, где лежит исходный файл. Если папка уже существует, данные в ней перезапишутся. Предварительно сделайте резервную копию!

4. Использование надстроек: без программирования

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

🔹 Лучшие надстройки для разделения файлов:

  • 📊 Kutools for Excel — платная, но с trial-периодом. Функция Split Workbook делит книгу по листам, строкам или столбцам.
  • 🆓 ASAP Utilities — бесплатная. В меню Range → Split into separate files.
  • 🌐 Ablebits Split Tables — плагин с гибкими настройками (разделение по значению ячейки, количеству строк и т.д.).

Пример работы с ASAP Utilities:

  1. Установите надстройку и перезапустите Excel.
  2. Выделите данные и нажмите ASAP Utilities → Range → Split into separate files.
  3. Укажите столбец для разделения (например, Customer ID).
  4. Выберите формат (.xlsx, .csv или .pdf).
  5. Нажмите Split — файлы сохранятся в указанную папку.

💡 Преимущество надстроек: они обрабатывают данные быстрее VBA и поддерживают форматы .csv, .pdf, .txt. Например, Kutools может разделить файл на части по 1000 строк каждая — полезно для загрузки данных в системы с ограничением по объему.

5. Разделение в Google Sheets: облачные инструменты

В Google Sheets нет встроенных инструментов для разделения, но можно использовать Google Apps Script или сторонние сервисы.

🔹 Способ 1: Apps Script

  1. Откройте таблицу и нажмите Расширения → Apps Script.
  2. Вставьте этот код:
    function splitSheet() {
    

    const sheet = SpreadsheetApp.getActiveSpreadsheet();

    const data = sheet.getActiveSheet().getDataRange().getValues();

    const colIndex = 0; // Номер столбца для разделения (0 = A, 1 = B...)

    const uniqueValues = [...new Set(data.slice(1).map(row => row[colIndex]))];

    uniqueValues.forEach(value => {

    const filteredData = data.filter((row, i) => i === 0 || row[colIndex] === value);

    const newSheet = SpreadsheetApp.create(`Split_${value}`);

    newSheet.getActiveSheet().getRange(1, 1, filteredData.length, filteredData[0].length).setValues(filteredData);

    });

    }

  3. Нажмите Выполнить (▶️) и разрешите доступ к таблице.

⚠️ Внимание: Скрипт создаст новые файлы в Google Drive, а не скачает их на компьютер. Чтобы получить файлы локально, выделите их в Drive и нажмите Файл → Скачать.

🔹 Способ 2: Сервис SplitSheet

  • 🔗 Перейдите на SplitSheet.app (бесплатно для файлов до 10 MB).
  • 📤 Загрузите свой файл .xlsx или .csv.
  • 🎛️ Укажите столбец для разделения и формат выходных файлов.
  • 📥 Скачайте архив с результатами.

6. Разделение по размеру: для загрузки в системы с ограничениями

Некоторые сервисы (например, , CRM-системы или банковские порталы) принимают файлы не больше 5–10 MB. Если ваш Excel весит 50 MB, его нужно разбить на части по количеству строк.

🔹 Как разделить файл по 1000 строк:

  1. Добавьте вспомогательный столбец с формулой:
    =ЦЕЛОЕ((СТРОКА()-2)/1000)+1

    Эта формула пронумерует строки группами по 1000 штук (1, 1, 1... 2, 2, 2... и т.д.).

  2. Отсортируйте данные по этому столбцу.
  3. Скопируйте первые 1000 строк в новый файл, затем следующие 1000 и т.д.

🔹 Автоматизация через Power Query:

  • 📊 Загрузите данные в Power Query (Данные → Из таблицы/диапазона).
  • 🔢 Добавьте индексный столбец (Добавить столбец → Индексный столбец).
  • 🧮 Создайте пользовательский столбец с формулой:
    =Number.IntegerDivide([Index]-1, 1000) + 1
  • 📂 Сгруппируйте данные по этому столбцу (Преобразовать → Группировка).
  • 📤 Экспортируйте каждую группу в отдельный файл.

⚠️ Внимание: При делении больших файлов (более 100 000 строк) Power Query может зависать. В таких случаях используйте VBA или специализированные утилиты вроде Excel Splitter (бесплатная программа для Windows).

7. Частые ошибки и как их избежать

Даже опытные пользователи сталкиваются с проблемами при разделении файлов. Вот самые распространенные ошибки и их решения:

ОшибкаПричинаРешение
Файлы сохраняются пустымиНеверно указан диапазон данных в макросеПроверьте переменные lastRow и colNum в коде VBA
Потеря форматированияЭкспорт в .csv не сохраняет стилиИспользуйте формат .xlsx или .pdf
Ошибка "Слишком много файлов"Папка содержит >32 000 файлов (ограничение Windows)Разбивайте данные на подпапки (например, по буквам алфавита)
Макрос не запускаетсяОтключены макросы в настройках ExcelПерейдите в Файл → Параметры → Центр управления безопасностью → Параметры центра → Включить все макросы
Данные в файлах дублируютсяНе снят фильтр перед запуском макросаДобавьте строку ws.AutoFilterMode = False в начало кода

🔹 Как проверить результаты:

  • 📊 Откройте 2–3 случайных файла и сверьте количество строк с исходными данными.
  • 🔍 Проверьте уникальные значения в столбце-разделителе (должны совпадать с именами файлов).
  • 📁 Убедитесь, что все файлы сохранены в одной папке (иначе часть данных может потеряться).

FAQ: Ответы на популярные вопросы

Можно ли разделить Excel на отдельные файлы .pdf?

Да, но не напрямую. Сначала разделите файл на отдельные листы (любым методом из статьи), затем:

  1. Выделите все листы (правый клик по вкладке → Выбрать все листы).
  2. Нажмите Файл → Экспорт → Создать PDF/XPS.
  3. В настройках выберите Опубликовать как отдельные файлы.

Для автоматизации используйте макрос:

Sub ExportSheetsToPDF()

Dim ws As Worksheet

For Each ws In ThisWorkbook.Worksheets

ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ThisWorkbook.Path & "\" & ws.Name & ".pdf"

Next ws

End Sub

Как разделить файл по датам (например, по месяцам)?

Используйте Power Query:

  1. Загрузите данные в Power Query.
  2. Добавьте столбец с месяцем: выделите столбец с датами → Добавить столбец → Дата → Месяц → Название.
  3. Сгруппируйте данные по этому столбцу (Преобразовать → Группировка).
  4. Экспортируйте каждую группу в отдельный файл.

Для VBA измените код из раздела 3: в строке colNum = 1 укажите номер столбца с датами, а в имени файла используйте форматирование:

newWb.SaveAs folderPath & "\" & Format(key, "yyyy-mm") & ".xlsx"
Есть ли ограничения на количество файлов при разделении?

Да, зависит от метода:

  • VBA: до 32 000 файлов в одной папке (ограничение Windows).
  • Power Query: до 1 000 000 строк в исходном файле (иначе возможны зависания).
  • Google Sheets: до 5 млн ячеек на файл (10 000 строк × 500 столбцов).

Для больших объемов используйте Python с библиотекой pandas или специализированные утилиты вроде Excel Splitter Pro.

Как объединить разделенные файлы обратно?

Используйте Power Query:

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

Для VBA используйте этот код:

Sub CombineFiles()

Dim folderPath As String, fileName As String

Dim wb As Workbook, ws As Worksheet

Dim lastRow As Long

folderPath = "C:\YourFolder\" ' Укажите путь к папке

fileName = Dir(folderPath & "*.xlsx")

Set ws = ThisWorkbook.Sheets(1)

lastRow = 1

Do While fileName <> ""

Set wb = Workbooks.Open(folderPath & fileName)

wb.Sheets(1).UsedRange.Copy ws.Cells(lastRow, 1)

lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row + 1

wb.Close False

fileName = Dir()

Loop

End Sub

Можно ли разделить файл по нескольким столбцам одновременно?

Да, но потребуется модифицировать код VBA. Например, чтобы разделить данные по паре Регион + Год:

  1. Создайте вспомогательный столбец с формулой объединения:
    =A2 & "|" & B2

    (где A — регион, B — год).

  2. В макросе укажите этот столбец для группировки:
    colNum = 3 ' Номер вспомогательного столбца
  3. После разделения удалите вспомогательный столбец из каждого файла.

В Power Query добавьте пользовательский столбец с объединенными значениями и группируйте по нему.