01 Что делает макрос
Сводные таблицы - отличный механизм для анализа больших наборов данных. Вы можете создать отчет, а затем поместить поле (например, регион) в фильтр отчета. Вы можете выбрать каждый элемент данных по очереди, а затем создать новый файл для каждого варианта сводной таблицы. Этот макрос позволяет автоматически перебрать все значения в фильтре отчета и создать новый файл для каждого значения фильтра.
В объектной модели Excel, Фильтр сводной таблицы - PageField. Для создания файла со сводной таблицей для каждого элемента, мы должны перебрать коллекцию PivotItems объекта PageField. Во время цикла мы динамически меняем выбор в фильтре отчета, а затем экспортируем отчет сводной таблицы в новую книгу.
02 Код макроса
SubNoviiFailDlyaKajdogoElementaFiltra()'Шаг 1: Объявляем переменныеDimptAsPivotTableDimpfAsPivotFieldDimpiAsPivotItem'Шаг 2: Проверяем, что выделена сводная таблицаOnErrorResumeNextSetpt = ActiveSheet.PivotTables(ActiveCell.PivotTable.Name)'Шаг 3: Выход, если активная ячейка не в сводной таблицеIfptIsNothingThenMsgBox"Вы должны поместить курсор в сводную таблицу."ExitSubEndIf'Шаг 4: Выход, если более одного поля страницыIfpt.PageFields.Count > 1ThenMsgBox"Слишком много полей фильтра отчетов. Предел 1."ExitSubEndIf'Шаг 5: Начало циклаForEachpfInpt.PageFieldsForEachpiInpf.PivotItems'Шаг 6: Изменить выбор в фильтре отчетовpt.PivotFields(pf.Name).CurrentPage = pi.Name'Шаг 7: Скопируйте область данных в новую книгуpt.TableRange1.CopyWorkbooks.Add.Worksheets(1).PasteApplication.DisplayAlerts =FalseActiveWorkbook.SaveAs _Filename:="C:\Регион\" & pi.Name & ".xlsx"ActiveWorkbook.CloseApplication.DisplayAlerts =True'Шаг 8: Получить следующий элементNextpiNextpfEndSub
03 Как работает макрос
1. Шаг 1 объявляет две переменные объекта, используя Pt в качестве контейнера памяти для сводной таблицы и Pf в качестве контейнера для памяти наших полей данных. Это позволяет макросу перебрать все поля данных в сводной таблице.
2. Шаг 2 присваиваем активной сводной таблице переменную РТ. Мы делаем это, используя свойство ActiveCell.PivotTable.Name, чтобы получить имя целевого диапазона. Если активная ячейка не находится внутри сводной таблицы, выдается ошибка. Именно поэтому макрос использует On Error Resume Next Statement. Это говорит Excel продолжить макрос, если есть ошибка.
3. Шаг 3 проверяет переменную РТ - если она пустая, то выводим пользователю сообщение о том, что необходимо поместить курсор в сводную таблицу и выходим из процедуры.
4. Шаг 4 определяет, сколько полей в фильтре (если количество PageFields больше единицы, значит в сводной таблице более одного фильтра). Мы делаем эту проверку, чтобы избежать печати отчетов для остальных фильтров. Без этой проверки вы можете печатать сотни страниц. Макрос останавливается, если количество полей в фильтре больше 1. Вы можете удалить это ограничение.
5. Шаг 5 запускает два цикла. Первый перебирает все фильтры отчета. Второй проходит по всем элементам фильтра, который в настоящее время выбран.
6. Для каждого элемента макрос захватывает имя элемента и использует его для изменения выбора в сводной таблице.
7. Шаг 7 копирует TableRange1 (встроенный объект — диапазон, который указывает на диапазон основной области данных для сводной таблицы). Затем вставляет данные в новую книгу и сохраняет её. Обратите внимание, что вам нужно изменить путь сохранения.
8. После того, как мы прошли через все пункты фильтра, макрос переходит к следующему фильтру. После того, как все фильтры были оценены, макрос заканчивается.
04 Как использовать
Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:
1. Активируйте редактор Visual Basic, нажав ALT + F11.
2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
3. Выберите Insert➜Module.
4. Введите или вставьте код во вновь созданном модуле.
05 Скачать файл
Автор проекта
Дмитрий Якушев
Привет! Меня зовут Дмитрий. С 2014 года Microsoft Cretified Trainer. Вместе с командой управляем этим сайтом. Наша цель - помочь вам эффективнее работать в Excel.
Изучайте наши статьи с примерами формул, сводных таблиц, условного форматирования, диаграмм и макросов. Записывайтесь на наши курсы или заказывайте обучение в корпоративном формате.
Сайт https://akademia-excel.ru/
ИП Якушев Дмитрий Александрович
ОГРНИП: 314501721200022
ИНН: 501706813807
Образовательная лицензия № Л035-01255-50/01194039
Почта: info@akademia-excel.ru
Телефон для связи: + 7 (958) 697-73-88, + 7 (495) 145-23-86
Регистрация на сайте означает согласие с пользовательским соглашением и на получение рассылки и рекламных материалов.
Политика в отношении обработки и защиты персональных данных.
Банковские реквизиты:
Расчетный счет 40802810500000003597
Банк АО «Тинькофф Банк»
Юридический адрес Банка Москва, 123060,1-й Волоколамский проезд, д. 10, стр. 1
Корр. счет Банка 30101810145250000974
ИНН Банка 7710140679
БИК Банка 044525974
Подписывайтесь на нас в соц.сетях:
Сайт https://akademia-excel.ru/
ИП Якушев Дмитрий Александрович
ОГРНИП: 314501721200022
ИНН: 501706813807
Образовательная лицензия № Л035-01255-50/01194039
Банковские реквизиты:
Расчетный счет 40802810500000003597
Банк АО «Тинькофф Банк»
Юридический адрес Банка Москва, 123060,1-й Волоколамский проезд, д. 10, стр. 1
Корр. счет Банка 30101810145250000974
ИНН Банка 7710140679
БИК Банка 044525974
Регистрация на сайте означает согласие с пользовательским соглашением и на получение рассылки и рекламных материалов.
Политика в отношении обработки и защиты персональных данных.
Почта: info@akademia-excel.ru
Телефон для связи: + 7 (958) 697-73-88, + 7 (495) 145-23-86
Написать в тех.поддержку
Подписывайтесь:
авторизуйтесь