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

Когда требуется разделить таблицу — и зачем это делать

Работа с большими массивами данных в Microsoft Excel часто требует их структурирования. Разделение одной таблицы на две может понадобиться в самых разных сценариях: от подготовки отчётов для разных отделов до оптимизации производительности файла. Например, если у вас есть общий прайс-лист с тысячами позиций, но менеджеры работают только с определёнными категориями товаров — логичнее разделить его на отдельные таблицы по группам.

Ещё одна частая причина — ограничения Excel. При работе с таблицами свыше 1 048 576 строк (максимум для одного листа) или при необходимости использовать разные форматы данных для частей одной таблицы разделение становится не роскошью, а необходимостью. Также это актуально для создания сводных отчётов, где исходные данные нужно подавать в разных разрезах: по регионам, периодам или типам операций.

В этой статье мы разберём 5 проверенных способов разделения таблиц в Excel — от элементарных (под силу новичку) до продвинутых (с использованием Power Query и макросов), а также дадим рекомендации, какой метод выбрать в зависимости от задачи.

Способ 1: Копирование данных вручную (для небольших таблиц)

Самый простой, но и самый трудоёмкий метод — ручное копирование. Он подходит для таблиц до 500–1000 строк, где не требуется автоматическая синхронизация данных между двумя частями. Алгоритм действий:

  1. Выделите диапазон ячеек, который нужно перенести во вторую таблицу (например, строки с 20 по 100).
  2. Нажмите Ctrl+C (или ПКМ → Копировать).
  3. Перейдите на новый лист (или в другое место текущего листа) и вставьте данные (Ctrl+V).
  4. При необходимости отформатируйте новую таблицу (границы, заголовки и т.д.).

Плюсы: не требует специальных знаний, работает в любой версии Excel.

Минусы: при изменении исходных данных вторую таблицу придётся обновлять вручную, высок риск ошибок при большом объёме данных.

⚠️ Внимание: Если в исходной таблице используются связанные формулы (например, =СУММ(Лист1!A1:A10)), после копирования они превратятся в статические значения. Чтобы сохранить связи, используйте ПКМ → Специальная вставка → Формулы.

Выделили нужный диапазон|Проверили отсутствие скрытых строк/столбцов|Скопировали данные (Ctrl+C)|Создали новый лист (или выбрали место вставки)|Вставили данные (Ctrl+V)|Провернули форматирование новой таблицы-->

Способ 2: Разделение с помощью фильтра (для таблиц со схожими данными)

Если таблицу нужно разделить по какому-то критерию (например, по региону, категории или статусу), удобно использовать автофильтр. Допустим, у вас есть таблица продаж с колонкой «Регион», и вам нужно создать отдельные таблицы для каждого региона.

Инструкция:

  1. Выделите заголовок таблицы и включите фильтр: Данные → Фильтр (или нажмите Ctrl+Shift+L).
  2. Раскройте выпадающий список в колонке, по которой будете делить данные (например, «Регион»), и выберите первое значение (например, «Москва»).
  3. Скопируйте отфильтрованные строки (Ctrl+C) и вставьте их на новый лист.
  4. Вернитесь к исходной таблице, снимите фильтр по первому значению и повторите шаги для следующего региона.

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

Sub CopyFilteredData()

Dim wsSource As Worksheet, wsDest As Worksheet

Set wsSource = ActiveSheet

Set wsDest = Worksheets.Add

wsSource.UsedRange.AutoFilter Field:=3, Criteria1:="Москва" ' 3 — номер колонки с регионом

wsSource.UsedRange.SpecialCells(xlCellTypeVisible).Copy wsDest.Range("A1")

wsSource.AutoFilterMode = False

End Sub

Копирую данные вручную|Использую фильтр|Применяю Power Query|Пишу макросы|Другой вариант-->

Способ 3: Функция ФИЛЬТР (Excel 365 и 2021)

В новых версиях Excel появилась мощная функция ФИЛЬТР (FILTER), которая позволяет динамически разделять данные без копирования. Например, если у вас есть таблица с заказами, вы можете создать отдельные списки для заказов со статусами «Выполнен» и «Отменён».

Синтаксис функции:

=ФИЛЬТР(массив; включить; [если_пусто])

Где:

  • 📌 массив — исходный диапазон данных (например, A2:D100);
  • 📌 включить — условие фильтрации (например, C2:C100="Выполнен");
  • 📌 [если_пусто] — значение, которое будет показано, если нет совпадений (необязательно).

Пример: чтобы вывести все строки, где в колонке C (статус) указано «Выполнен», используйте:

=ФИЛЬТР(A2:D100; C2:C100="Выполнен"; "Нет выполненных заказов")
⚠️ Внимание: Функция ФИЛЬТР возвращает динамический массив, который автоматически обновляется при изменении исходных данных. Если вы хотите получить статичную таблицу, скопируйте результат и вставьте как значения (Специальная вставка → Значения).
Преимущества функции ФИЛЬТР Ограничения
Автоматическое обновление при изменении данных Работает только в Excel 365 и 2021
Не требует VBA или Power Query Может замедлять работу файла при больших массивах
Гибкие условия фильтрации (можно комбинировать с ИЛИ, И) Не сохраняет форматирование исходной таблицы

Способ 4: Power Query — профессиональное разделение данных

Power Query (или Get & Transform в Excel) — это инструмент для ETL-процессов (извлечение, преобразование, загрузка данных). Он идеально подходит для разделения больших таблиц по сложным критериям, например:

  • 📊 Разбиение по нескольким колонкам одновременно (регион + категория товара);
  • 🔄 Разделение одной таблицы на множество файлов (по одному на каждый фильтр);
  • 🔍 Очистка данных перед разделением (удаление дубликатов, замена значений).

Пошаговая инструкция:

  1. Выделите исходную таблицу и нажмите Данные → Из таблицы/диапазона (или Данные → Получение данных → Из таблицы/диапазона в Excel 2016–2019).
  2. В открывшемся окне Power Query примените фильтр к колонке, по которой хотите разделить данные (например, «Категория»).
  3. Нажмите на стрелку в заголовке колонки и выберите значение для первой части таблицы (например, «Электроника»).
  4. Нажмите Файл → Закрыть и загрузить в... и выберите Новый лист.
  5. Повторите шаги 2–4 для других значений (например, «Одежда», «Продукты»).

🔹 Преимущество Power Query: все шаги сохраняются, и при обновлении исходных данных (Данные → Обновить все) разделенные таблицы автоматически синхронизируются.

Как автоматизировать разделение на множество файлов?

С помощью Power Query можно создать шаблон, который разобьёт таблицу на отдельные файлы Excel по каждому уникальному значению в колонке. Для этого:

1. Загрузите данные в Power Query.

2. Примените группировку по колонке-разделителю (Преобразование → Группировка).

3. Напишите пользовательскую функцию (на языке M) для экспорта каждой группы в отдельный файл.

4. Используйте File.Contents и Excel.Workbook для сохранения.

Пример кода на M:
(GroupedRows as table) =>

let

Source = GroupedRows,

#"Added Custom" = Table.AddColumn(Source, "Export", each Excel.Workbook([Data], true))

in

#"Added Custom"

Способ 5: Макросы VBA для автоматического разделения

Если вам нужно регулярно делить таблицы по одним и тем же критериям, макросы VBA сэкономят часы времени. Например, следующий код разобьёт таблицу на отдельные листы по уникальным значениям в колонке A (предположим, это «Категория»):

Sub SplitTableByColumn()

Dim wsSource As Worksheet, wsNew As Worksheet

Dim rngData As Range, cell As Range

Dim dict As Object, key As Variant

Dim lastRow As Long, lastCol As Long

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

Set dict = CreateObject("Scripting.Dictionary")

Set wsSource = ActiveSheet

lastRow = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row

lastCol = wsSource.Cells(1, wsSource.Columns.Count).End(xlToLeft).Column

Set rngData = wsSource.Range("A1").CurrentRegion

' Заполняем словарь уникальными значениями из колонки A (начиная со строки 2)

For Each cell In wsSource.Range("A2:A" & lastRow)

If Not dict.Exists(cell.Value) Then

dict.Add cell.Value, 1

End If

Next cell

' Создаём отдельные листы для каждого уникального значения

For Each key In dict.Keys

wsSource.Range("A1").CurrentRegion.AutoFilter Field:=1, Criteria1:=key

Set wsNew = Worksheets.Add(After:=Worksheets(Worksheets.Count))

wsNew.Name = Left(key, 31) ' Ограничение на имя листа — 31 символ

wsSource.UsedRange.SpecialCells(xlCellTypeVisible).Copy wsNew.Range("A1")

wsSource.AutoFilterMode = False

Next key

' Удаляем автофильтр и сообщаем о завершении

wsSource.AutoFilterMode = False

MsgBox "Таблица разделена на " & dict.Count & " листов!", vbInformation

End Sub

🔧 Как адаптировать код:

  • 📍 Измените Field:=1 на номер колонки, по которой нужно разделить данные (например, Field:=3 для колонки C).
  • 📍 Замените Left(key, 31) на свою логику формирования имён листов, если значения длинные.
  • 📍 Добавьте строку wsNew.Columns.AutoFit перед Next key, чтобы подогнать ширину столбцов.
⚠️ Внимание: Перед запуском макроса сохраните файл в формате .xlsm (с поддержкой макросов) и включите их выполнение в настройках Excel (Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Включить все макросы). В противном случае код не сработает.
Application.ScreenUpdating = False

и включите в конце:

Application.ScreenUpdating = True

Это ускорит выполнение в 5–10 раз.-->

Сравнение методов: какой выбрать для вашей задачи?

Выбор способа разделения таблицы зависит от объёма данных, частоты обновлений и требований к автоматизации. Ниже — сравнительная таблица:

Метод Объём данных Автоматизация Синхронизация Сложность Когда использовать
Ручное копирование До 1000 строк Нет Нет Разовые задачи, маленькие таблицы
Фильтр + копирование До 10 000 строк Частично (макросы) Нет ⭐⭐ Таблицы со схожими данными, периодическое разделение
Функция ФИЛЬТР До 100 000 строк Да (динамические массивы) Да ⭐⭐ Excel 365/2021, нужна автоматическая синхронизация
Power Query 100 000+ строк Да Да ⭐⭐⭐ Сложные критерии, очистка данных, регулярные отчёты
Макросы VBA Любой Да По коду ⭐⭐⭐⭐ Повторяющиеся задачи, разделение на множество файлов

🔹 Рекомендации:

  • 📌 Для однократного разделения небольшой таблицы хватит ручного копирования или фильтра.
  • 📌 Если данные часто обновляются, используйте ФИЛЬТР (Excel 365) или Power Query.
  • 📌 Для автоматизации на регулярной основе (например, еженедельные отчёты) напишите макрос VBA.
  • 📌 Если нужно разделить таблицу на десятки файлов по разным критериям, комбинируйте Power Query и VBA.

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

При разделение таблиц пользователи часто сталкиваются с типичными проблемами. Вот самые распространённые из них и способы их решения:

  1. Потеря форматирования: При копировании данных в новую таблицу исчезают цвета, границы или числовые форматы.
    Решение: Используйте Специальная вставка → Форматы после вставки данных или настройте условное форматирование заново.
  2. Связанные формулы ломаются: После разделения таблицы формулы типа =СУММ(Лист1!A:A) начинают выдавать ошибки.
    Решение: Замените абсолютные ссылки на именованные диапазоны или используйте ИНДЕКС/ПОИСКПОЗ для динамических ссылок.
  3. Дублирование заголовков: При автоматическом разделении на несколько листов заголовки таблицы копируются многократно.
    Решение: В макросе VBA добавьте проверку на первую строку:
    If wsNew.Cells(1, 1).Value = "" Then
    

    wsSource.Rows(1).Copy wsNew.Rows(1)

    End If

  4. Ограничение на количество листов: Excel позволяет создать не более 255 листов в одном файле.
    Решение: Разбивайте данные на несколько файлов с помощью VBA или экспортируйте в CSV.

Критическая ошибка: Если при разделении таблицы с помощью Power Query или VBA Excel «зависает», скорее всего, проблема в рекурсивных ссылках (например, формулы ссылаются друг на друга) или в слишком большом объёме данных. Попробуйте:

  • 🔹 Разбить задачу на части (например, делить таблицу по 10 000 строк за раз).
  • 🔹 Отключить автоматический пересчёт формул (Формулы → Параметры вычислений → Вручную).
  • 🔹 Сохранить файл в формате .xlsb (двоичный формат Excel, работает быстрее с большими данными).

FAQ: Ответы на частые вопросы

Можно ли разделить таблицу на две части по условию (например, чётные и нечётные строки)?

Да, для этого подойдёт любой из методов:

  • 📌 Фильтр: Добавьте вспомогательную колонку с формулой =ЕСЛИ(ОСТАТ(СТРОКА();2)=0; "Чётная"; "Нечётная") и отфильтруйте по ней.
  • 📌 Power Query: Добавьте столбец с условием = if Number.Mod([Индекс], 2) = 0 then "Чётная" else "Нечётная".
  • 📌 VBA: Используйте цикл For с проверкой If i Mod 2 = 0 Then.
Как разделить таблицу на два файла Excel автоматически?

Для этого напишите макрос VBA, который:

  1. Создаёт новую книгу (Workbooks.Add).
  2. Копирует часть данных в неё.
  3. Сохраняет файл под заданным именем (ActiveWorkbook.SaveAs "Путь\Имя.xlsx").

Пример кода для разделения на два файла по критерию в колонке A:

Sub SplitToFiles()

Dim wsSource As Worksheet, wbNew As Workbook

Set wsSource = ActiveSheet

' Фильтруем и копируем первую часть

wsSource.Range("A1").CurrentRegion.AutoFilter Field:=1, Criteria1:="Критерий1"

Set wbNew = Workbooks.Add

wsSource.UsedRange.SpecialCells(xlCellTypeVisible).Copy wbNew.Sheets(1).Range("A1")

wbNew.SaveAs "C:\Temp\Часть1.xlsx"

wbNew.Close

' Фильтруем и копируем вторую часть

wsSource.AutoFilterMode = False

wsSource.Range("A1").CurrentRegion.AutoFilter Field:=1, Criteria1:="Критерий2"

Set wbNew = Workbooks.Add

wsSource.UsedRange.SpecialCells(xlCellTypeVisible).Copy wbNew.Sheets(1).Range("A1")

wbNew.SaveAs "C:\Temp\Часть2.xlsx"

wbNew.Close

wsSource.AutoFilterMode = False

End Sub

Почему после разделения таблицы формулы возвращают ошибку #ССЫЛКА!?

Ошибка #ССЫЛКА! возникает, если:

  • 🔹 Вы удалили или переместили лист, на который ссылались формулы.
  • 🔹 В макросе VBA неверно указан диапазон копирования (например, скопированы не все столбцы).
  • 🔹 При использовании ФИЛЬТР исходный диапазон изменил размер.

Решение:

  1. Проверьте все ссылки в формулах (Формулы → Зависимости формул → Влияющие ячейки).
  2. Если использовали VBA, добавьте в код проверку на существование листа:
    On Error Resume Next
    

    Set wsNew = Worksheets("НовыйЛист")

    If wsNew Is Nothing Then Set wsNew = Worksheets.Add

    wsNew.Name = "НовыйЛист"

Как разделить таблицу по количеству строк (например, по 500 строк в каждой новой таблице)?

Используйте макрос VBA с циклом, который копирует данные порциями:

Sub SplitByRowCount()

Dim wsSource As Worksheet, wsNew As Worksheet

Dim i As Long, lastRow As Long, chunkSize As Long

Dim startRow As Long, endRow As Long

Set wsSource = ActiveSheet

lastRow = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row

chunkSize = 500 ' Количество строк в каждой новой таблице

startRow = 2 ' Начинаем с первой строки данных (заголовок на строке 1)

Do While startRow <= lastRow

endRow = Application.WorksheetFunction.Min(startRow + chunkSize - 1, lastRow)

Set wsNew = Worksheets.Add(After:=Worksheets(Worksheets.Count))

wsNew.Name = "Часть_" & (startRow + chunkSize - 1) / chunkSize

wsSource.Rows(1).Copy wsNew.Rows(1) ' Копируем заголовок

wsSource.Rows(startRow & ":" & endRow).Copy wsNew.Rows(2)

startRow = endRow + 1

Loop

End Sub

🔹 Настройка: Измените chunkSize = 500 на нужное количество строк.

Можно ли разделить таблицу по вертикали (по столбцам), а не по строкам?

Да, для этого:

  • 📌 Ручной способ: Скопируйте нужные столбцы (Ctrl+Space для выделения столбца) и вставьте на новый лист.
  • 📌 Power Query: Удалите ненужные столбцы в редакторе (Главная → Удалить столбцы).
  • 📌 VBA: Используйте Range("A:C").Copy для копирования диапазона столбцов.

💡 Пример макроса для разделения по столбцам:

Sub SplitByColumns()

Dim wsSource As Worksheet

Set wsSource = ActiveSheet

' Копируем столбцы A-C на новый лист

wsSource.Range("A:C").Copy Worksheets.Add.Range("A1")

' Копируем столбцы D-F на другой новый лист

wsSource.Range("D:F").Copy Worksheets.Add.Range("A1")

End Sub