Макрос для создания сводной таблицы в Excel
Excel предоставляет широкие возможности для сбора, хранения и обработки большого объема данных. Однако с уверенностью можно сказать, что данные – это еще не все. Важно также способность и наличие возможности группировки значений данных, чтобы можно было получать какую-то информацию и презентовать ее в удобный вид для визуального анализа. Именно для реализации решений такого рода задач и служат сводные таблицы Excel. А если для создания сводных таблиц использовать макрос, получим неограниченные возможности.
Создание сводных таблиц макросом
Источник информации для сводных таблиц всегда один и тот же – база данных. Набор данных образующих базу для обработки в Excel может быть не только на листах рабочей книги, а также и во внешних источниках.
Для описания способа создания сводных таблиц средствами процедур VBA будет использоваться таблица, которая содержит данные по месяцам о оборотах семи магазинов фирмы за последние несколько лет деятельности.
Тестовая база для примера состоит из сгруппированных данных в 21 строке. Благодаря использованию сводных таблиц можно в читабельный вид презентовать изменение данных и извлечь соответственные результаты анализа.
Список данных по каждому месяцу определенного года содержит информацию о размере оборотов в отдельных магазинах фирмы. В таблице включен режим автофильтра, чтобы упростить на сколько возможно предварительный визуальный анализ данных.
С помощью макроса VBA создадим из этого большого объема данных читабельный и удобный для визуального анализа отчет в виде сводной таблице. Нам нужна сводная таблица отчета, в котором без труда можно прочитать интересующую нас информацию без визуального анализа сотен строк в исходной базе данных.
В данном примере создание сводной таблицы VBA-макросом будет достаточно простым. Простота решения будет достигнута за счет симуляции использования подобных параметров и действий, которые предоставляет к распоряжению мастер сводных таблиц в Excel. Используя экземпляр объекта PivotCaches запишем настройки своей сводной таблицы присвоив ей определенное имя. Это позволит потом непосредственно ссылаться на сводную таблицу в любой части кода. Для создания сводной таблицы используя макрос будем использовать метод PivotTableWizard. На этом же шаге будем использовать возможности объекта PivotFields, в котором определим структуру сводной таблицы с учетом исходных данных источника.
Написание кода макросов в Excel всегда начинается с открытия VBA-редактора (ALT+F11): «РАЗРАБОТЧИК»-«Код»-«Visual Basic».
Затем создадим модуль где будет храниться исходный код. Для этого выберите инструмент в редакторе VBA: «Insert»-«Module». В появившемся окне модуля введите следующий VBA-код макроса:
Sub CreateTableM()
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:="Лист1!A1:D21").CreatePivotTable TableDestination:="", TableName:="ТаблицаМ"
With ActiveSheet
.Name = "Анализ"
.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
End With
With ActiveSheet.PivotTables("ТаблицаМ")
.SmallGrid = True
.PivotFields("Оборот").Orientation = xlDataField
.PivotFields("Год").Orientation = xlPageField
.PivotFields("Месяц").Orientation = xlRowField
.PivotFields("Магазины").Orientation = xlColumnField
End With
End Sub
Теперь достаточно лишь запустить макрос выбрав инструмент: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«CreateTableM»-«Выполнить»:
В результате будет автоматически сгенерированная сводная таблица с помощью макроса.
Описание VBA-кода макроса для создания сводной таблицы Excel
Данный исходный код макроса позволяет автоматически сгенерировать сводную таблицу, такую же как показано на рисунке 4. Первая строка кода выглядит весьма необычно, но жизненно необходима для дальнейшей работы программы. Она содержит набор базовых параметров для коллекции PivotCaches, которые будут применены к создаваемой сводной таблице. В первом свойстве SourceType объявляется источник для загрузки данных в бедующую сводную таблицу. Параметр xlDatabase говорит нам о том, что исходные данные берутся с рабочего листа Excel.
Используя свойство SourceData задаем ссылку на диапазон ячеек, в котором находиться исходные данные предназначенные для последующей обработки. Указывая адрес ссылки в форме Лист1!A1:D21, мы определяем целый диапазон таблицы с исходными данными включая ее заголовки столбцов. Оба свойства (SourceType и SourceData) являются здесь аргументами для метода Add, который выполняет функцию сбора информации – аналогично инструкциям выполняемых при работе с мастером сводных таблиц. Функция создания сводной таблицы реализуется методом .CreatePivotTable, для которого так же необходимо указать следующие параметры.
Свойство TanleDestination позволяет установить место для вставки будущей сводной таблицы. Если есть необходимость вставить таблицу в конкретном месте выбранного листа, тогда следует указать здесь адрес ячейки для вставки. А если же необходимо создать сводную таблицу на новом листе, тогда достаточно указать пустую строку (“”) в качестве параметра. С помощью свойства TableName присваиваем внутреннее имя будущей таблицы, в данном примере это «ТаблицаМ». Обратите внимание, что название таблицы отличается от названия листа, в котором она будет находится. Благодаря присвоению внутреннего имени для создаваемой таблицы, появляется возможность отличать ее от многих других таблиц. Но самое главное преимущество – это возможность непосредственно ссылаться к таблице через имя, вместо того чтобы каждый раз указывать место и диапазон, где будет находиться сводная таблица.
Далее с помощью инструкции конструктора With собираем блок инструкций методов, свойств и параметров структуры. Все дальнейшие опции будут реализованы внутри свойства ActiveSheet. То есть будут касаться листа, в котором будет создана сводная таблица.
Свойством Name мы определяем имя для нового листа – в данном примере это имя «Анализ». Если нужно задать для нового листа имя такое же как у новой сводной таблицы (Таблица М), тогда эту задачу лучше всего реализовать именно на данном этапе написания кода макроса.
В следующей строке определяем место на новом листе, где будет сгенерирована сводная таблица. Указывая для параметра TanleDestination свойство:
ActiveSheet.Cells(3,1)
Так мы определяем, что таблица будет сгенерирована в третьей строке и в первом столбце листа. То есть в ячейке A3. Эти строки кода определяют базовую информацию о сводной таблице. Закрываем конструктор инструкцией End With.
Читайте также: Макрос для настройки полей и форматирования сводной таблицы.В следующих строках кода можно определить в каких полях должны находиться отобранные данные из исходной таблицы. Эта часть исходного кода должна начинаться с очередной инструкции конструктора With и заканчиваться инструкцией End With. А внутри конструктора указываться все параметры полей сводной таблицы.