Excel разбивка таблиц макрос

Разделение таблицы по листам

В Microsoft Excel есть много инструментов для сборки данных из нескольких таблиц (с разных листов или из разных файлов): прямые ссылки, функция ДВССЫЛ (INDIRECT), надстройки Power Query и Power Pivot и т.д. С этой стороны баррикад всё выглядит неплохо.

Но если вы нарвётесь на обратную задачу — разнесения данных из одной таблицы на разные листы — то всё будет гораздо печальнее. На сегодняшний момент цивилизованных встроенных инструментов для такого разделения данных в арсенале Excel, к сожалению, нет. Так что придется задействовать макрос на Visual Basic, либо воспольоваться связкой макрорекордер+Power Query с небольшой «доработкой напильником» после.

Давайте подробно рассмотрим, как это можно реализовать.

Постановка задачи

Имеем в качестве исходных данных вот такую таблицу размером больше 5000 строк по продажам:

Исходная таблица

Задача: разнести данные из этой таблицы по городам на отдельные листы этой книги. Т.е. на выходе нужно получить на каждом листе только те строки из таблицы, где продажа была в соответствующем городе:

Результаты разнесенные по листам

Подготовка

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

Во-первых, создадим отдельную таблицу-справочник, где в единственном столбце будут перечислены все города, для которых нужно создать отдельные листы. Само-собой, в этом справочнике могут быть не все города, присутствующие в исходных данных, а только те, по которым нам нужны отчеты. Проще всего создать такую таблицу, используя команду Данные — Удалить дубликаты (Data — Remove duplicates) для копии столбца Город или функцию УНИК (UNIQUE) — если у вас последняя версия Excel 365.

Поскольку новые листы в Excel по умолчанию создаются перед (левее) текущего (предыдущего), то имеет смысл также отсортировать города в этом справочнике по убыванию (от Я до А) — тогда после создания листы-города расположатся по алфавиту.

Во-вторых, преобразуем обе таблицы в динамические («умные»), чтобы с ними было проще работать. Используем команду Главная — Форматировать как таблицу (Home — Format as Table) или сочетание клавиш Ctrl+T. На появившейся вкладке Конструктор (Design) назовём их таблПродажи и таблГорода, соответственно:

Таблица продаж и справочник по городам

Способ 1. Макрос для деления по листам

На вкладке Разработчик (Developer) нажмите на кнопку Visual Basic или используйте сочетание клавиш Alt+F11. В открывшемся окне редактора макросов вставьте новый пустой модуль через меню Insert — Module и скопируйте туда следующий код:

Sub Splitter()
    For Each cell In Range("таблГорода")
        Range("таблПродажи").AutoFilter Field:=3, Criteria1:=cell.Value
        Range("таблПродажи[#All]").SpecialCells(xlCellTypeVisible).Copy
        Sheets.Add
        ActiveSheet.Paste
        ActiveSheet.Name = cell.Value
        ActiveSheet.UsedRange.Columns.AutoFit
    Next cell
    Worksheets("Данные").ShowAllData
End Sub	

Здесь с помощью цикла For Each … Next реализован проход по ячейкам справочника таблГорода, где для каждого города происходит его фильтрация (метод AutoFilter) в исходной таблице продаж и затем копирование результатов на новый созданный лист. Попутно созданный лист переименовывается в то же имя города и на нем включается автоподбор ширины столбцов для красоты.

Запустить созданный макрос в Excel можно на вкладке Разработчик кнопкой Макросы (Developer — Macros) или сочетанием клавиш Alt+F8.

Способ 2. Создаем множественные запросы в Power Query

У предыдущего способа, при всей его компактности и простоте, есть существенный недостаток — созданные макросом листы не обновляются при изменениях в исходной таблице продаж. Если обновление «на лету» необходимо, то придется использовать связку VBA+Power Query, а точнее — создавать с помощью макроса не просто листы со статическими данными, а обновляемые запросы Power Query.

Макрос в этом случае частично похож на предыдущий (в нём тоже есть цикл For Each … Next для перебора городов в справочнике), но внутри цикла будет уже не фильтрация и копирование, а создание запроса Power Query и выгрузка его результатов на новый лист:

Sub Splitter2()

For Each cell In Range("таблГорода")
    ActiveWorkbook.Queries.Add Name:=cell.Value, Formula:= _
        "let" & Chr(13) & "" & Chr(10) & "    Источник = Excel.CurrentWorkbook(){[Name=""таблПродажи""]}[Content]," & Chr(13) & "" & Chr(10) & "    #""Измененный тип"" = Table.TransformColumnTypes(Источник,{{""Категория"", type text}, {""Наименование"", type text}, {""Город"", type text}, {""Менеджер"", type text}, {""Дата сделки"", type datetime}, {""Стоимость"", type number}})," & Chr(13) & "" & Chr(10) & "    #""Строки с примененным фильтром"" = Table.Se" & _
        "lectRows(#""Измененный тип"", each ([Город] = """ & cell.Value & """))" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    #""Строки с примененным фильтром"""
    ActiveWorkbook.Worksheets.Add
    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
        "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=" & cell.Value & ";Extended Properties=""""" _
        , Destination:=Range("$A$1")).QueryTable
        .CommandType = xlCmdSql
        .CommandText = Array("SELECT * FROM [" & cell.Value & "]")
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .ListObject.DisplayName = cell.Value
        .Refresh BackgroundQuery:=False
    End With
    ActiveSheet.Name = cell.Value
Next cell
End Sub

После его запуска мы увидим те же листы по городам, но формировать их будут уже созданные запросы Power Query:

Созданные запросы для каждого города в Power Query

При любых изменениях в исходных данных достаточно будет обновить соответствующую таблицу правой кнопкой мыши — команда Обновить (Refresh) или обновить сразу все города оптом, используя кнопку Обновить всё на вкладке Данные (Data — Refresh All).

Ссылки по теме

  • Что такое макросы, как их создавать и использовать
  • Сохранение листов книги как отдельных файлов
  • Сборка данных со всех листов книги в одну таблицу

Введение

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

Как быстро разделить таблицу Excel на отдельные книги макросом. Пошаговый алгоритм

  • Сочетанием клавиш Alt+F11 открываем окно Visual Basic
  • Создаем новый модуль Insert -> Module
  • Вставляем код
Sub Разделить_столбец_по_книгам()
Const column = 2 'номер столбца, по которому будет происходить разделение.'
Const head = True
Set wbAct = ActiveWorkbook

Set dic = CreateObject("Scripting.Dictionary")

lr = Cells(Rows.Count, 1).End(xlUp).Row
lc = Cells(1, Columns.Count).End(xlToLeft).column

arr = Range("A1", Cells(lr, lc)).Value

If head Then fr = 2 Else fr = 1

For i = fr To UBound(arr)
    If Trim(arr(i, column)) <> "" Then dic.Item(arr(i, column)) = dic.Item(arr(i, column)) & "|" & i
Next

iPath = wbAct.Path & Application.PathSeparator & "Result" & Application.PathSeparator
'Result - название папки с результатами'
If Dir(iPath, vbDirectory) = "" Then MkDir iPath

arrDic = dic.keys
Set Rng = Nothing
Application.DisplayAlerts = False
For i = 0 To UBound(arrDic)
rrs = Split(Mid(dic.Item(arrDic(i)), 2), "|")
    If head Then Set Rng = Rows(1)
    For Each rr In rrs
        If Not Rng Is Nothing Then Set Rng = Union(Rows(rr), Rng) Else Set Rng = Rows(rr)
    Next
    Set wb = Workbooks.Add(1)
    Set sh = wb.Sheets(1)
    Rng.Copy
    sh.[A1].PasteSpecial xlPasteColumnWidths
    sh.[A1].PasteSpecial xlPasteAll
    Set Rng = Nothing
    wb.SaveAs iPath & Replace_symbols(arrDic(i)) & ".xlsx", xlOpenXMLWorkbook
    wb.Close False
Next
Application.DisplayAlerts = True
End Sub
'Замена запрещённых символов в имени файла или папки'
Function Replace_symbols(ByVal txt As String) As String
    St$ = "\/~!@#$%^&*=|`'"""
    For i% = 1 To Len(St$)
        txt = Replace(txt, Mid(St$, i, 1), "_")
    Next
    Replace_symbols = txt
End Function
  • На второй строке кода, цифру 2 замените на номер столбца, в котором содержится критерий для разбиения
  • Сохраните код Ctrl+S
  • Сохраните файл Excel, как книгу с поддержкой макросов xlsm
  • Выполните макрос Alt+F8

Папка с новыми файлами будет лежать по тому же пути, что и файл, в котором вы запускали макрос

Заключение

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

У нас Вы можете заказать выполнение задач по MS Excel и Google таблицам

А также, пройти бесплатные онлайн курсы по MS Excel с заданиями

Содержание

  1. Как разделить таблицу в excel на 2 части по горизонтали
  2. Как разделить таблицу на две части в Excel?
  3. Как разделить таблицу на 2 части?
  4. Как в Excel разделить таблицу?
  5. Как разбить таблицу на колонки в Excel?
  6. Как разделить окно на две части в Excel?
  7. Как разделить таблицу в ворде по вертикали?
  8. Как перенести таблицу с одной страницы на другую?
  9. Как Разбить на страницы Excel?
  10. Как в Excel разбить на страницы?
  11. Как в Excel разбить диапазон?
  12. Как в Excel разделить данные в одной ячейке?
  13. Как в Excel разделить текст в одной ячейке на две строки?
  14. Как в Excel разбить число на несколько ячеек?
  15. Как сделать 2 страницы в Экселе?
  16. Как открыть 2 окна Excel на рабочем столе?
  17. Как сделать две страницы на одном листе в Excel?
  18. 4 способа разбить ячейки на части в программе Microsoft Excel
  19. Способ 1: объединение ячеек
  20. Способ 2: разделение объединенных ячеек
  21. Способ 3: разделение по диагонали путем форматирования
  22. Способ 4: разделение по диагонали через вставку фигуры
  23. Как разделить таблицу в Excel
  24. Другие интересные материалы
  25. Разделение таблицы по листам
  26. Постановка задачи
  27. Подготовка
  28. Способ 1. Макрос для деления по листам
  29. Способ 2. Создаем множественные запросы в Power Query

Как разделить таблицу в excel на 2 части по горизонтали

Как разделить таблицу на две части в Excel?

Как разделить таблицу на 2 части?

  1. Поместите курсор в строку, которая должна стать первой строкой второй таблицы. В представленном примере это третья строка. …
  2. На вкладке МАКЕТ в группе Объединение выберите команду Разделить таблицу. Таблица будет разделена на две части.

Как в Excel разделить таблицу?

  1. В таблице щелкните ячейку, которую вы хотите разделить.
  2. Перейдите на вкладку «Макет таблицы».
  3. В области «Ячейки»щелкните «Разделить».
  4. В диалоговом окне выберите нужное количество столбцов и строк.

Как разбить таблицу на колонки в Excel?

Разделение текста на столбцы с помощью мастера распределения текста по столбцам

  1. Выделите ячейку или столбец с текстом, который вы хотите разделить.
  2. На вкладке Данные нажмите кнопку Текст по столбцам.
  3. В мастере распределения текста по столбцам установите переключатель с разделителями и нажмите кнопку Далее.

Как разделить окно на две части в Excel?

Разделение листа на области

  1. Выделите ячейку под строкой или справа от столбца, по которым следует произвести разделение.
  2. На вкладке Вид в группе Окно нажмите кнопку Разделить. Чтобы отменить разделение листа, нажмите кнопку Разделить еще раз.

Как разделить таблицу в ворде по вертикали?

2. Вы также можете использовать простую комбинацию клавиш, чтобы разделить таблицу на несколько таблиц, поместите курсор в ячейку, из которой вы хотите разделить, и затем нажмите Ctrl + Shift + Enter вместе, чтобы разделить таблицу на две части.

Как перенести таблицу с одной страницы на другую?

Выполняется это одновременным нажатием клавиш Ctrl+Enter, при курсоре, установленном в строку, которую намереваемся перенести. Вторая часть таблицы переместится на новую страницу, перейдя на которую нажатием кнопки Enter, можно вписать «Продолжение…», вставить дополнительную строку и пронумеровать ее ячейки.

Как Разбить на страницы Excel?

Вставка разрыва страницы

  1. Щелкните лист, который нужно напечатать.
  2. На вкладке Вид в группе Режимы просмотра книги нажмите кнопку Страничный режим . …
  3. Выполните одно из указанных ниже действий. …
  4. На вкладке Разметка страницы в группе Параметры страницы нажмите кнопку Разрывы .
  5. Нажмите кнопку Вставить разрыв страницы .

Как в Excel разбить на страницы?

Как разделить лист в Excel

  1. Нажмите на разделитель, который находится справа над вертикальной полосой прокрутки.
  2. Перетащите его вниз, чтобы разделить окно.
  3. Обратите внимание на две вертикальные полосы прокрутки. …
  4. Чтобы удалить разделитель, дважды щелкните по горизонтальной линии, которая делит окно (или перетащите её на место).

Как в Excel разбить диапазон?

Распределение содержимого ячейки на соседние столбцы

  1. Выделите ячейку, диапазон или весь столбец, где содержатся текстовые значения, которые требуется разделить.
  2. На вкладке Данные в группе Работа с данными нажмите кнопку Текст по столбцам.
  3. Следуя инструкциям мастера текстов, укажите, как вы хотите разделить текст на отдельные столбцы.

Как в Excel разделить данные в одной ячейке?

Разделение содержимого ячейки на несколько ячеек

  1. Выделите одну или несколько ячеек, которые хотите разделить. …
  2. На вкладке Данные в группе Работа с данными нажмите кнопку Текст по столбцам. …
  3. Установите переключатель С разделителями, если выбран другой вариант, и нажмите кнопку Далее.

Как в Excel разделить текст в одной ячейке на две строки?

Чтобы разбить текст на строки в одной ячейке Excel нужно нажать комбинацию клавиш Alt+Enter.

Как в Excel разбить число на несколько ячеек?

Выделите ячейки с номерами, которые нужно разбить на цифры, затем нажмите Kutools > Слияние и разделение > Разделить клетки.

Как сделать 2 страницы в Экселе?

Вставка разрыва страницы

  1. Щелкните нужный таблицу.
  2. На вкладке Вид в группе Режимы просмотра книги щелкните элемент Страничный режим. …
  3. Выполните одно из указанных ниже действий. …
  4. На вкладке Разметка страницы в группе Параметры страницы нажмите кнопку Разрывы.
  5. Нажмите кнопку Вставить разрыв страницы.

Как открыть 2 окна Excel на рабочем столе?

Как открыть два документа в разных окнах на одном экране. Разделить экран на области в Excel.

  1. После открытия перейдите в панели быстрого доступа на вкладку «Вид».
  2. После нажатия на пиктограмму «Упорядочить все» на экране появится окошко с контекстным меню, предлагающим выбор расположения окон:

Как сделать две страницы на одном листе в Excel?

Щелкните маленькую стрелку запуска диалогового окна справа внизу. Откроется диалоговое окно Параметры страницы . Выберите вкладку Страница в диалоговом окне Параметры страницы . Установите переключатель разместить не более чем на в разделе Масштаб .

4 способа разбить ячейки на части в программе Microsoft Excel

При работе с таблицами Excel иногда нужно разбить определенную ячейку на две части. Сразу нужно отметить, что ячейки в программе Microsoft Excel являются первичными структурными элементами, и они не подлежат делению на более мелкие части, если до этого не были объединены. Но, что делать, если нам, например, нужно создать сложную шапку таблицы, один из разделов который, делится на два подраздела? В этом случае, можно применить небольшие хитрости.

Способ 1: объединение ячеек

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

  1. Нужно хорошо продумать всю структуру будущей таблицы.
  2. Над тем местом на листе, где нужно иметь разделенный элемент, выделяем две соседние ячейки. Находясь во вкладке «Главная», ищем в блоке инструментов «Выравнивание» на ленте кнопку «Объединить и поместить в центре». Жмем на неё.

Как видим, несмотря на то, что мы ничего не делили, а наоборот соединяли, создается иллюзия разделенной ячейки.

Способ 2: разделение объединенных ячеек

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

    Выделяем два соседних столбца. Кликаем на стрелку около кнопки «Объединить и поместить в центре». В появившемся списке, кликаем по пункту «Объединить по строкам».

Кликаем по той объединенной ячейке, которую нужно разделить. Опять жмем на стрелку около кнопки «Объединить и поместить в центре». На этот раз выбираем пункт «Отменить объединение».

Таким образом, мы получили разделенную ячейку. Но, нужно учесть, что Excel воспринимает этим способом разделенную ячейку, как единый элемент.

Способ 3: разделение по диагонали путем форматирования

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

    Кликаем правой кнопкой мыши по нужной ячейке, и в появившемся контекстном меню выбираем пункт «Формат ячеек…». Или же, набираем на клавиатуре сочетание клавиш Ctrl+1.

В открывшемся окне формата ячеек, переходим во вкладку «Граница».

Около размещенного посередине окна «Надпись» кликаем на одну из двух кнопок, на которых изображена косая линия, наклоненная справа налево, или слева направо. Выбираем нужный вариант. Тут же можно выбрать тип и цвет линии. Когда выбор сделан, жмем на кнопку «OK».

После этого, ячейка будет разделена косой чертой по диагонали. Но, нужно учесть, что Excel воспринимает этим способом разделенную ячейку, как единый элемент.

Способ 4: разделение по диагонали через вставку фигуры

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

    Находясь во вкладке «Вставка», в блоке инструментов «Иллюстрации», кликаем по кнопке «Фигуры».

В открывшемся меню, в блоке «Линии», кликаем по самой первой фигуре.

Проводим линию от угла к углу ячейки в том, направлении, которое вам требуется.

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

Мы рады, что смогли помочь Вам в решении проблемы.

Помимо этой статьи, на сайте еще 11907 инструкций.
Добавьте сайт Lumpics.ru в закладки (CTRL+D) и мы точно еще пригодимся вам.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.

Источник

Как разделить таблицу в Excel

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

Для того чтобы разделить таблицу необходимо:

  • открыть таблицу (перейти в редактор таблиц);

  • нажать на кнопку для вызова диалогового окна Деление на страницы;

  • в диалоговом окне Деление на страницы доступны следующие варианты:

  • переключатель Одной страницей отключает деление таблицы;
  • выбрать способ деления таблицы:
  1. Произвольный — разбиение таблицы на произвольные части.

    Разрыв страницы перед строкой задается командой контекстного меню Начать новую страницу.

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

    Таблица с разрывом на чертеже будет выглядеть следующим образом:

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

    Строки заголовка таблицы не учитываются. В примере таблица будет разделена на части таким образом, чтобы в каждой части было 5 строк со значениями:

    В примере таблица будет разделена на части таким образом, чтобы общая высота строк со значениями в каждой части была не менее 50 мм (допускается отклонение высоты отдельной части таблицы в большую сторону, если суммарная высота строк, входящих в неё не равна 50 мм)

    Разделенная на части таблица допускает независимое перемещение каждой части.

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

    Другие интересные материалы

    Источник

    Разделение таблицы по листам

    В Microsoft Excel есть много инструментов для сборки данных из нескольких таблиц (с разных листов или из разных файлов): прямые ссылки, функция ДВССЫЛ (INDIRECT) , надстройки Power Query и Power Pivot и т.д. С этой стороны баррикад всё выглядит неплохо.

    Но если вы нарвётесь на обратную задачу — разнесения данных из одной таблицы на разные листы — то всё будет гораздо печальнее. На сегодняшний момент цивилизованных встроенных инструментов для такого разделения данных в арсенале Excel, к сожалению, нет. Так что придется задействовать макрос на Visual Basic, либо воспольоваться связкой макрорекордер+Power Query с небольшой «доработкой напильником» после.

    Давайте подробно рассмотрим, как это можно реализовать.

    Постановка задачи

    Имеем в качестве исходных данных вот такую таблицу размером больше 5000 строк по продажам:

    Задача: разнести данные из этой таблицы по городам на отдельные листы этой книги. Т.е. на выходе нужно получить на каждом листе только те строки из таблицы, где продажа была в соответствующем городе:

    Подготовка

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

    Во-первых, создадим отдельную таблицу-справочник, где в единственном столбце будут перечислены все города, для которых нужно создать отдельные листы. Само-собой, в этом справочнике могут быть не все города, присутствующие в исходных данных, а только те, по которым нам нужны отчеты. Проще всего создать такую таблицу, используя команду Данные — Удалить дубликаты (Data — Remove duplicates) для копии столбца Город или функцию УНИК (UNIQUE) — если у вас последняя версия Excel 365.

    Поскольку новые листы в Excel по умолчанию создаются перед (левее) текущего (предыдущего), то имеет смысл также отсортировать города в этом справочнике по убыванию (от Я до А) — тогда после создания листы-города расположатся по алфавиту.

    Во-вторых, преобразуем обе таблицы в динамические («умные»), чтобы с ними было проще работать. Используем команду Главная — Форматировать как таблицу (Home — Format as Table) или сочетание клавиш Ctrl + T . На появившейся вкладке Конструктор (Design) назовём их таблПродажи и таблГорода, соответственно:

    Способ 1. Макрос для деления по листам

    На вкладке Разработчик (Developer) нажмите на кнопку Visual Basic или используйте сочетание клавиш Alt + F11 . В открывшемся окне редактора макросов вставьте новый пустой модуль через меню Insert — Module и скопируйте туда следующий код:

    Здесь с помощью цикла For Each . Next реализован проход по ячейкам справочника таблГорода, где для каждого города происходит его фильтрация (метод AutoFilter) в исходной таблице продаж и затем копирование результатов на новый созданный лист. Попутно созданный лист переименовывается в то же имя города и на нем включается автоподбор ширины столбцов для красоты.

    Запустить созданный макрос в Excel можно на вкладке Разработчик кнопкой Макросы (Developer — Macros) или сочетанием клавиш Alt + F8 .

    Способ 2. Создаем множественные запросы в Power Query

    У предыдущего способа, при всей его компактности и простоте, есть существенный недостаток — созданные макросом листы не обновляются при изменениях в исходной таблице продаж. Если обновление «на лету» необходимо, то придется использовать связку VBA+Power Query, а точнее — создавать с помощью макроса не просто листы со статическими данными, а обновляемые запросы Power Query.

    Макрос в этом случае частично похож на предыдущий (в нём тоже есть цикл For Each . Next для перебора городов в справочнике), но внутри цикла будет уже не фильтрация и копирование, а создание запроса Power Query и выгрузка его результатов на новый лист:

    После его запуска мы увидим те же листы по городам, но формировать их будут уже созданные запросы Power Query:

    При любых изменениях в исходных данных достаточно будет обновить соответствующую таблицу правой кнопкой мыши — команда Обновить (Refresh) или обновить сразу все города оптом, используя кнопку Обновить всё на вкладке Данные (Data — Refresh All) .

    Источник

Если у вас есть большой рабочий лист, содержащий несколько столбцов и сотни или тысячи данных строк, теперь вы хотите разделить эту большую таблицу на несколько небольших таблиц на основе значения столбца или количества строк, чтобы получить следующие результаты. Как бы вы могли справиться с этой задачей в Excel?

Разделите большую таблицу на несколько таблиц на основе значения столбца с кодом VBA

Разделите большую таблицу на несколько таблиц на основе определенного количества строк с кодом VBA

Разделите большую таблицу на несколько таблиц на основе значения столбца или количества строк с удивительной функцией


Разделите большую таблицу на несколько таблиц на основе значения столбца с кодом VBA

Чтобы разделить эту большую таблицу на несколько таблиц на основе определенного значения столбца, следующий код VBA может оказать вам услугу. Пожалуйста, сделайте так:

1. Удерживайте ALT + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.

2. Нажмите Вставить > Модулии вставьте следующий код в Модули Окно.

Код VBA: разделите большую таблицу на несколько таблиц по ключевому столбцу:

Sub Splitdatabycol()
'by Extendoffice
Dim lr As Long
Dim ws As Worksheet
Dim vcol, i As Integer
Dim icol As Long
Dim myarr As Variant
Dim title As String
Dim titlerow As Integer
Dim xTRg As Range
Dim xVRg As Range
Dim xWSTRg As Worksheet
On Error Resume Next
Set xTRg = Application.InputBox("Please select the header rows:", "Kutools for Excel", "", Type:=8)
If TypeName(xTRg) = "Nothing" Then Exit Sub
Set xVRg = Application.InputBox("Please select the column you want to split data based on:", "Kutools for Excel", "", Type:=8)
If TypeName(xVRg) = "Nothing" Then Exit Sub
vcol = xVRg.Column
Set ws = xTRg.Worksheet
lr = ws.Cells(ws.Rows.Count, vcol).End(xlUp).Row
title = xTRg.AddressLocal
titlerow = xTRg.Cells(1).Row
icol = ws.Columns.Count
ws.Cells(1, icol) = "Unique"
Application.DisplayAlerts = False
If Not Evaluate("=ISREF('xTRgWs_Sheet!A1')") Then
Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = "xTRgWs_Sheet"
Else
Sheets("xTRgWs_Sheet").Delete
Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = "xTRgWs_Sheet"
End If
Set xWSTRg = Sheets("xTRgWs_Sheet")
xTRg.Copy
xWSTRg.Paste Destination:=xWSTRg.Range("A1")
ws.Activate
For i = (titlerow + xTRg.Rows.Count) To lr
On Error Resume Next
If ws.Cells(i, vcol) <> "" And Application.WorksheetFunction.Match(ws.Cells(i, vcol), ws.Columns(icol), 0) = 0 Then
ws.Cells(ws.Rows.Count, icol).End(xlUp).Offset(1) = ws.Cells(i, vcol)
End If
Next
myarr = Application.WorksheetFunction.Transpose(ws.Columns(icol).SpecialCells(xlCellTypeConstants))
ws.Columns(icol).Clear
For i = 2 To UBound(myarr)
ws.Range(title).AutoFilter field:=vcol, Criteria1:=myarr(i) & ""
If Not Evaluate("=ISREF('" & myarr(i) & "'!A1)") Then
Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = myarr(i) & ""
Else
Sheets(myarr(i) & "").Move after:=Worksheets(Worksheets.Count)
End If
xWSTRg.Range(title).Copy
Sheets(myarr(i) & "").Paste Destination:=Sheets(myarr(i) & "").Range("A1")
ws.Range("A" & (titlerow + xTRg.Rows.Count) & ":A" & lr).EntireRow.Copy Sheets(myarr(i) & "").Range("A" & (titlerow + xTRg.Rows.Count))
Sheets(myarr(i) & "").Columns.AutoFit
Next
xWSTRg.Delete
ws.AutoFilterMode = False
ws.Activate
Application.DisplayAlerts = True
End Sub

3. После вставки кода нажмите F5 нажмите клавишу для запуска этого кода, и появится окно подсказки, выберите строку заголовка из ваших данных, см. снимок экрана:

4, Затем нажмите OK, и появится другое диалоговое окно, выберите данные столбца, на основе которых вы хотите разделить таблицу, см. снимок экрана:

5. Нажмите OK, эта большая таблица была разделена на несколько листов по значению столбца, которое расположено после основного листа. И новым листам присваивается имя со значением столбца. Смотрите скриншот:


Разделите большую таблицу на несколько таблиц на основе определенного количества строк с кодом VBA

Если вам нужно разделить таблицу на несколько таблиц в зависимости от количества строк, следующий код VBA может вам помочь.

1. Удерживайте ALT + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.

2. Нажмите Вставить > Модулии вставьте следующий код в Модули Окно.

Код VBA: разделите большую таблицу на несколько таблиц по количеству строк:

Sub Splitdatabyrows()
'Updated by Extendoffice 
Dim WorkRng As Range
Dim xRow As Range
Dim SplitRow As Integer
Dim xWs As Worksheet
Dim xTRg As Range
Dim xNTRg As Range
Dim xIER
On Error Resume Next
xTitleId = "KutoolsforExcel"
Set WorkRng = Application.Selection
Set xTRg = Application.InputBox("Please select the header row:", xTitleId, "", Type:=8)
If TypeName(xTRg) = "Nothing" Then Exit Sub
Set WorkRng = Application.InputBox("Please select the data range(exclude the header row):", xTitleId, WorkRng.Address, Type:=8)
If TypeName(WorkRng) = "Nothing" Then Exit Sub
SplitRow = Application.InputBox("Split Row Num", xTitleId, Type:=1)
If SplitRow = 0 Then Exit Sub
Set xWs = WorkRng.Parent
Set xRow = WorkRng.Rows(1)
xIER = WorkRng.Rows.Count
xIER = WorkRng.Row + xIER - 1
Application.ScreenUpdating = False
For i = 1 To WorkRng.Rows.Count Step SplitRow
    resizeCount = SplitRow
    If (xIER - xRow.Row + 1) < SplitRow Then
        resizeCount = (xIER - xRow.Row + 1)
    End If
    xRow.Resize(resizeCount).Copy
    Set xWs = Application.Worksheets.Add(after:=Application.Worksheets(Application.Worksheets.Count))
    If xIER > (xRow.Row + SplitRow - 1) Then
        xWs.Name = xRow.Row & " - " & (xRow.Row + SplitRow - 1)
    ElseIf xIER = xRow.Row Then
        xWs.Name = xRow.Row
    Else
        xWs.Name = xRow.Row & " - " & xIER
    End If
    Application.ActiveSheet.Range("A1").PasteSpecial
    Set xNTRg = Application.ActiveSheet.Range("A1")
    xTRg.Copy
    xNTRg.Insert
    Set xRow = xRow.Offset(SplitRow)
Next
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub

3, Затем нажмите F5 нажмите, в появившемся диалоговом окне выберите строку заголовка, см. снимок экрана:

4, Затем нажмите OKи во втором поле подсказки выберите диапазон данных, который вы хотите разделить по количеству строк, см. снимок экрана:

5. А затем продолжайте нажимать OK кнопку, в третьем поле запроса введите количество строк, которые вы хотите разделить, см. снимок экрана:

6, Затем нажмите OK Кнопка, основная таблица была разделена на несколько листов в зависимости от количества строк, как показано ниже:


Разделите большую таблицу на несколько таблиц на основе значения столбца или количества строк с удивительной функцией

Возможно, приведенные выше коды трудны для большинства пользователей, здесь я расскажу об удивительной функции —Разделить данные of Kutools for Excel. С помощью этой утилиты вы можете быстро и легко разделить большую таблицу на несколько таблиц по ключевому столбцу или количеству строк.

Советы:Чтобы применить это Разделить данные функция, во-первых, вы должны скачать Kutools for Excel, а затем быстро и легко примените эту функцию.

После установки Kutools for Excel, пожалуйста, сделайте так:

1. Выберите диапазон данных, который вы хотите разделить, а затем щелкните Кутулс Плюс > Разделить данные, см. снимок экрана:

2. В Разделить данные на несколько листов диалоговом окне укажите необходимые параметры:

(1.) Выберите Конкретный столбец or Фиксированные строки из Сплит на основе раздел по мере необходимости;

(2.) Укажите имя нового листа из Правила раскрывающийся список, вы можете добавить Префикс or Суффикс к именам листов.

3, Затем нажмите Ok кнопку, и теперь большая таблица была разделена на несколько небольших таблиц в новой книге. Смотрите скриншоты:

Нажмите, чтобы скачать Kutools for Excel и бесплатная пробная версия прямо сейчас!


Больше относительных статей:

  • Разделить книгу на отдельные файлы Excel в Excel
  • Возможно, вам придется разделить большую книгу на отдельные файлы Excel, сохранив каждый рабочий лист книги как отдельный файл Excel. Например, вы можете разделить книгу на несколько отдельных файлов Excel, а затем передать каждый файл другому человеку для обработки. Поступая таким образом, вы можете заставить определенных людей обрабатывать определенные данные и сохранить ваши данные в безопасности. В этой статье будут представлены способы разделения большой книги на отдельные файлы Excel на основе каждого рабочего листа.
  • Разделить полное имя на имя и фамилию в Excel
  • Предположим, у вас есть список имен, как показано на первом снимке экрана в одном столбце ниже, и вам нужно разделить полное имя на столбец имени , столбец отчества и столбец с фамилией, как показано на следующем снимке экрана. Вот несколько хитрых методов, которые помогут вам решить эту проблему.
  • Разделить длинный столбец на несколько столбцов в Excel
  • Если у вас есть данные в длинных столбцах в Excel, их просмотр будет затруднен. Но теперь, если вы можете разделить такой длинный список на несколько столбцов в Excel, это упростит просмотр.
  • Разделить слово или число на отдельные ячейки в Excel
  • Если у вас есть список чисел или слов на листе, и теперь вам нужно разбить содержимое ячейки на буквы в разных ячейках, как показано на следующем снимке экрана, как вы можете справиться с этим заданием в Excel?
  • Разделите длинный список на равные группы в Excel
  • Если у вас есть длинный список данных, которые необходимо разделить на несколько равных групп, как показано на следующем снимке экрана, как вы могли бы быстро и легко справиться с этой задачей в Excel?

Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы и хранение данных; Разделить содержимое ячеек; Объедините повторяющиеся строки и сумму / среднее значение… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Избранные и быстро вставляйте формулы, Диапазоны, диаграммы и изображения; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Группировка сводной таблицы по номер недели, день недели и другое … Показать разблокированные, заблокированные ячейки разными цветами; Выделите ячейки, у которых есть формула / имя

вкладка kte 201905


Вкладка Office — предоставляет интерфейс с вкладками в Office и значительно упрощает вашу работу

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Как с помощью макроса разбить таблицу по опред. параметру?

master-dd

Дата: Воскресенье, 19.05.2013, 16:04 |
Сообщение № 1

Группа: Пользователи

Ранг: Участник

Сообщений: 78


Репутация:

1

±

Замечаний:
0% ±


2016

Добрый день!
Прошу помочь вот в каком вопросе.
Есть исходная таблица — отчёт, в первой колонке которой содержится список ответственных лиц «Трговый представитель» (пример во вложении).
Ломал голову, но никаких идей даже нет, как с помощью макроса сделать так, чтобы эта таблица разбивалась на отдельные таблицы,отсортированные по «Торговый представитель» для возможности распечатки отчёта по каждому представителю с сохранением шапки. Причём каждый раз количество сторк с представителем будет разная (сейчас Алексей — 1, Василий — 7, Дмитрий — 1 и т.д., а может быть Алексей — 8, Василий — 2, и т.д. или вообще не быть некоторых представителей). Макросу должно быть всё равно, сколько строк или сотолбцов в исходной талице (каждый раз будет разная). Прошу помочь, т.к. VBA я ещё только-только начал изучать, а по работе данный макрос сильно помог бы.

Заранее спасибо всем ответившим.

К сообщению приложен файл:

-_.xls
(34.5 Kb)

 

Ответить

AndreTM

Дата: Воскресенье, 19.05.2013, 16:14 |
Сообщение № 2

Группа: Друзья

Ранг: Старожил

Сообщений: 1762


Репутация:

498

±

Замечаний:
0% ±


2003 & 2010

А что это у вас в четвёртой таблице разные представители? cool

Ладно,хорошо, посмотрим, что можно сделать…


Skype: andre.tm.007
Donate: Qiwi: 9517375010

 

Ответить

master-dd

Дата: Воскресенье, 19.05.2013, 16:18 |
Сообщение № 3

Группа: Пользователи

Ранг: Участник

Сообщений: 78


Репутация:

1

±

Замечаний:
0% ±


2016

AndreTM,
Случайно получилось (в каждой таблице должен быть только 1 представитель).

 

Ответить

AndreTM

Дата: Воскресенье, 19.05.2013, 16:56 |
Сообщение № 4

Группа: Друзья

Ранг: Старожил

Сообщений: 1762


Репутация:

498

±

Замечаний:
0% ±


2003 & 2010

Город — это место проживания? Или место проведения операции? Это к тому, что может ли быть один представитель, действующий в нескольких городах?
Если это так, то как сортировать даты — город-дата- или только по дате?


Skype: andre.tm.007
Donate: Qiwi: 9517375010

 

Ответить

master-dd

Дата: Воскресенье, 19.05.2013, 17:01 |
Сообщение № 5

Группа: Пользователи

Ранг: Участник

Сообщений: 78


Репутация:

1

±

Замечаний:
0% ±


2016

AndreTM,
Сосртировать даты не нужно. Нужно чтобы макрос сортировал и создавал новую таблицу только по торговому представителю. Т.е., как только в строчке меняется содержимое 1 колонки (например Алексей на Васю), то макрос сразу же разбивает таблицу и «клеит» шапку. В закладке «Как должно быть» я так и показал.

 

Ответить

AndreTM

Дата: Воскресенье, 19.05.2013, 17:30 |
Сообщение № 6

Группа: Друзья

Ранг: Старожил

Сообщений: 1762


Репутация:

498

±

Замечаний:
0% ±


2003 & 2010

А зачем сразу-то править результат? Это излишние телодвижения и нагрузка…
Выходные данные вам требуются (вы же сами говорите) для распечатки отчета по представителю — так из этого и надо исходить.
Вот есть данные, вот вы внесли все изменения (да хоть одно изменение), нажали на кнопочку — и получили результат.
И при этом можно ведь не формировать всех представителей, если вам для распечатки нужен только один — просто надо его предварительно указать как-то. Опять же, раз вы собираетесь формировать отдельные файлы — то зачем вам сейчас формирование общего (пусть и разбитого по представителям) списка? Файлы вы формируете для чего — рассылать их будете? Или просто вы не знаете, как иначе распечатать данные по отдельному представителю? И почему это не надо сортировать даты, если вы собираетесь делать отчёт-распечатку?..

Вот, посмотри пример. Там просто делается выборка на отдельный лист по одному текущему представителю.


Skype: andre.tm.007
Donate: Qiwi: 9517375010

Сообщение отредактировал AndreTMВоскресенье, 19.05.2013, 19:17

 

Ответить

master-dd

Дата: Воскресенье, 19.05.2013, 21:06 |
Сообщение № 7

Группа: Пользователи

Ранг: Участник

Сообщений: 78


Репутация:

1

±

Замечаний:
0% ±


2016

AndreTM,
Большое спасибо за помощь.

Но я постараюсь развёрнуто ответить на Ваш вопрос.

В моей работе существует такое явление, как переводной заказ (ПЗ). Торговый представитель дистрибутора нашей продукции, приходя в торговую точку обязан внести в заявку тот заказ, который в этой точке ранее оставил наш представитель (ПЗ): наша фирма напрямую торговлей не занимается, но участвует в формировании заказов на свою продукцию розницей. Т.к. ПЗ — это бумажка, которую розниник/продавец/завмаг до момента прихода торгового представителя может потерять, этому представителю крайне важно иметь у себя копию. Итак, наш представитель, составив в точке заявку оставляет бумажный ПЗ,а сам дублирует эот ПЗ в электронном виде в программе EPZ (это проект VBA в Excel). Я её сам написал с учётом специфики своей работы. Наш представитель за день посещает много точек, которые обслуживают разные торговые представители. И в конце дня, нажатием кнопочки формируется и автоматичекси отправляется файлик с электронными ПЗ, сведённымив одну таблицу, информация в которой отсортирована по 1-й колонке (по Торговому представителю). Человеку, который этот файл получает необходимо распечатать и раздать каждому представителю свой список и так, чтобы в него не попали точки других представителей.
Теперь, получается, используя Ваш совет я могу в главный файл прописать Ваш макрос, «углубив» и «расширив» и человек, получивший его становясь на определённую ячейку сразу сможет распечатывать нужного точки нужного представителя. НО! Хотелось бы, чтобы он УЖЕ получал несколько файлов, разбитых по каждому представителю (как сделать уникальные названия, привязанные к дате создания ПЗ я знаю).
Заранее спасибо!

Сообщение отредактировал master-ddВоскресенье, 19.05.2013, 21:09

 

Ответить

AndreTM

Дата: Воскресенье, 19.05.2013, 21:30 |
Сообщение № 8

Группа: Друзья

Ранг: Старожил

Сообщений: 1762


Репутация:

498

±

Замечаний:
0% ±


2003 & 2010

Ну так сформированную выборку в файл скинуть — это пять строчек кода…
Можно сделать операцию так: когда отбор произведен, на листе с результатом нажимается кнопочка «Записать в файл». Самое интересное, что можно сделать и разные режимы — например, можно включать-отключать интерактив (т.е. по формировании выборки — она записывается в файл автоматом), можно построить «надстройку» над вышеприведенным кодом в том плане, что перебрать весь список Представителей и сформировать сразу все файлы (или, скажем, выбрать только некоторых Представителей и формировать), можно ещё что-то…
Кстати, методы реализации тех или иных действий зависят ещё и от того, как у вас уже организовано хранилище и интерфейс. Ведь наверняка у вас уже есть либо именованный диапазон, либо отдельный лист со списком Представителей — а это означает, что мне уже не надо извращаться, например, отбирая уникальные имена представителей. С другой стороны, если у вас в проекте меню/списки/кнопки уже организованы в UserForm’ах — можно ориентироваться на объекты интерфейса…
И т.д.


Skype: andre.tm.007
Donate: Qiwi: 9517375010

 

Ответить

master-dd

Дата: Воскресенье, 19.05.2013, 21:41 |
Сообщение № 9

Группа: Пользователи

Ранг: Участник

Сообщений: 78


Репутация:

1

±

Замечаний:
0% ±


2016

AndreTM,
Можно, но я не подумал, что с помощью макроса, формирующего основную таблицу (которую потом необходимо разбить) нельзя записать в файл, содержащий основную таблицу, другой макрос (Ваш). Пробовал — не получилось.
В связи с этим другой вопрос. В приложении — реальный файл-отчёт, который получит дистрибутор. Как сделать так, чтобы при его формировании в него уже прописывался ваш код? (необходимо, чтобы макрос из одного файла — любого, для примера — прописывал Ваш код в главный файл) И самое главное — в этом файле, после создания макроса этот макрос должен остаться. А у меня при закрытии выскакивает вот такое сообщение: «The following features cannot be saved in macro-free workbooks: VB project … «. А мне необходимо, чтобы файл был сохранён именно в .xls sad

 

Ответить

AndreTM

Дата: Воскресенье, 19.05.2013, 22:12 |
Сообщение № 10

Группа: Друзья

Ранг: Старожил

Сообщений: 1762


Репутация:

498

±

Замечаний:
0% ±


2003 & 2010

Просто файл для дистрибуции надо формировать не «с чистого листа», а на основе шаблона, уже содержащего нужные макросы smile

ЗЫ. Приложения не вижу…


Skype: andre.tm.007
Donate: Qiwi: 9517375010

 

Ответить

Hugo

Дата: Воскресенье, 19.05.2013, 22:25 |
Сообщение № 11

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3140


Репутация:

670

±

Замечаний:
0% ±


2010, теперь уже с PQ

macro-free workbooks — это xlsx.
В xls макрос должен сохраняться.


excel@nxt.ru
webmoney: R418926282008 Z422237915069

 

Ответить

Rampl

Дата: Вторник, 28.05.2013, 13:45 |
Сообщение № 12

Группа: Пользователи

Ранг: Прохожий

Сообщений: 4


Репутация:

0

±

Замечаний:
0% ±


Доброго дня! нужен аналогичный макрос. при разбитии таблицы на файлы, имя нового файла совпадало бы с именем критерия, по которому формируются новые таблицы. На примере вышеприложенного файла, нужно чтобы в файле «Петр» должна быть таблица с Петрами… можно?

Сообщение отредактировал RamplВторник, 28.05.2013, 13:53

 

Ответить

AndreTM

Дата: Вторник, 28.05.2013, 19:07 |
Сообщение № 13

Группа: Друзья

Ранг: Старожил

Сообщений: 1762


Репутация:

498

±

Замечаний:
0% ±


2003 & 2010

Rampl, а в чём проблема-то?
Формируйте результат в том виде, в каком вам надо — вынесите «критерий» в первые строчки (до заголовка), скопируйте таблицу без первого столбца… Затем при формировании файла со страницы результата — просто возьмите нужные данные из ячеек листа и подставьте в имя файла. Те самые «пять строк кода».


Skype: andre.tm.007
Donate: Qiwi: 9517375010

 

Ответить

Понравилась статья? Поделить с друзьями:
  • Excel разбивка по неделям
  • Excel разбивка по месяцам
  • Excel разбивает каждую ячейку на отдельную страницу
  • Excel равномерное распределение значений
  • Excel равно цифре числа