Vba excel pivot table - IT Новости из мира ПК
Remkomplekty.ru

IT Новости из мира ПК
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Vba excel pivot table

11.8 Работа со сводными таблицами (объект PivotTable)

Объект Excel.PivotTable, программная работа со сводными таблицами и кубами OLAP в Excel средствами VBA, объект PivotCache, создание макета сводной таблицы

В процессе работы большинства предприятий накапливаются так называемые необработанные данные (raw data) о деятельности. Например, для торгового предприятия могут накапливаться данные о продажах товаров — по каждой покупке отдельно, для предприятий сотовой связи — статистика нагрузки на базовые станции и т.п. Очень часто менеджменту предприятия необходима аналитическая информация, которая генерируется на основе необработанной — например, посчитать вклад каждого вида товара в доходы предприятия или качество обслуживания в зоне данной станции. Из необработанной информации такие сведения извлечь очень тяжело: нужно выполнять очень сложные SQL-запросы, которые выполняются долго и часто мешают текущей работе. Поэтому все чаще в настоящее время необработанные данные сводятся вначале в хранилище архивных данных — Data Warehouse, а затем — в кубы OLAP, которые очень удобны для интерактивного анализа. Проще всего представить себе кубы OLAP как многомерные таблицы, в которых вместо стандартных двух измерений (столбцы и строки, как в обычных таблицах), измерений может быть очень много. Обычно для описания измерений в кубе используется термин «в разрезе». Например, отделу маркетинга может быть нужна информация во временном разрезе, в региональном разрезе, в разрезе типов продукта, в разрезе каналов продаж и т.п. При помощи кубов (в отличие от стандартных SQL-запросов) очень просто получать ответы на вопросы типа «сколько товаров такого-то типа было продано в четвертом квартале прошлого года в Северо-Западном регионе через региональных дистрибьюторов.

Конечно же, в обычных базах данных такие кубы не создать. Для работы с кубами OLAP требуются специализированные программные продукты. Вместе с SQL Server поставляется база данных OLAP от Microsoft, которая называется Analysis Services. Есть OLAP-решения от Oracle, IBM, Sybase и т.п.

Для работы с такими кубами в Excel встроен специальный клиент. По-русски он называется Сводная таблица (на графическом экране он доступен через меню Данные -> Сводная таблица), а по-английски — Pivot Table. Соответственно, объект, который представляет этот клиент, называется PivotTable. Необходимо отметить, что он умеет работать не только с кубами OLAP, но и с обычными данными в таблицах Excel или баз данных, но многие возможности при этом теряются.

Сводная таблица и объект PivotTable — это программные продукты фирмы Panorama Software, которые были приобретены Microsoft и интегрированы в Excel. Поэтому работа с объектом PivotTable несколько отличается от работы с другими объектами Excel. Догадаться, что нужно сделать, часто бывает непросто. Поэтому рекомендуется для получения подсказок активно использовать макрорекордер. В то же время при работе со сводными таблицами пользователям часто приходится выполнять одни и те же повторяющиеся операции, поэтому автоматизация во многих ситуациях необходима.

Как выглядит программная работа со сводной таблицей?

Первое, что нам потребуется сделать — создать объект PivotCache, который будет представлять набор записей, полученных с источника OLAP. Очень условно этот объект PivotCache можно сравнить с QueryTable. Для каждого объекта PivotTable можно использовать только один объект PivotCache. Создание объекта PivotCache производится при помощи метода Add() коллекции PivotCaches:

Dim PC1 As PivotCache

Set PC1 = ActiveWorkbook.PivotCaches.Add(xlExternal)

PivotCaches — стандартная коллекция, и из методов, которые заслуживают подробного рассмотрения, в ней можно назвать только метод Add(). Этот метод принимает два параметра:

  • SourceType — обязательный, определяет тип источника данных для сводной таблицы. Можно указать создание PivotTable на основе диапазона в Excel, данных из базы данных, во внешнем источнике данных, другой PivotTable и т.п. На практике обычно OLAP есть смысл использовать только тогда, когда данных много — соответственно нужно специализированное внешнее хранилище (например, Microsoft Analysis Services). В этой ситуации выбирается значение xlExternal.
  • SourceData — обязательный во всех случаях, кроме тех, когда значение первого параметра — xlExternal. Собственно говоря, определяет тот диапазон данных, на основе которого и будет создаваться PivotTable. Обычно принимает объект Range.

Следующая задача — настроить параметры объекта PivotCache. Как уже говорилось, этот объект очень напоминает QueryTable, и набор свойств и методов у него очень похожий. Некоторые наиболее важные свойства и методы:

  • ADOConnection — возможность возвратить объект ADO Connection, который автоматически создается для подключения к внешнему источнику данных. Используется для дополнительной настройки свойств подключения.
  • Connection — работает точно так же, как и одноименное свойство объекта QueryTable. Может принимать строку подключения, готовый объект Recordset, текстовый файл, Web-запрос. файл Microsoft Query. Чаще всего при работе с OLAP прописывается строка подключения напрямую (поскольку получать объект Recordset, например для изменения данных, большого смысла нет — источники данных OLAP практически всегда доступны только на чтение). Например, настройка этого свойства для подключения к базе данных Foodmart (учебная база данных Analysis Services) на сервере LONDON может выглядеть так:

PC1.Connection = «OLEDB;Provider=MSOLAP.2;Data Source=LONDON1;Initial Catalog = FoodMart 2000»

  • свойства CommandType и CommandText точно так же описывают тип команды, которая передается на сервер баз данных, и текст самой команды. Например, чтобы обратиться на куб Sales и получить его целиком в кэш на клиенте, можно использовать код вида
  • свойство LocalConnection позволяет подключиться к локальному кубу (файлу *.cub), созданному средствами Excel. Конечно, такие файлы для работы с «производственными» объемами данных использовать очень не рекомендуется — только для целей создания макетов и т.п.
  • свойство MemoryUsed возвращает количество оперативной памяти, используемой PivotCache. Если PivotTable на основе этого PivotCache еще не создана и не открыта, возвращает 0. Можно использовать для проверок, если ваше приложение будет работать на слабых клиентах.
  • свойство OLAP возвращает True, если PivotCache подключен к серверу OLAP.
  • OptimizeCache — возможность оптимизировать структуру кэша. Изначальная загрузка данных будет производиться дольше, но потом скорость работы может возрасти. Для источников OLE DB не работает.

Остальные свойства объекта PivotCache совпадают с аналогичными свойствами объекта QueryTable, и поэтому здесь рассматриваться не будут.

Главный метод объекта PivotCache — это метод CreatePivotTable(). При помощи этого метода и производится следующий этап — создание сводной таблицы (объекта PivotTable). Этот метод принимает четыре параметра:

  • TableDestination — единственный обязательный параметр. Принимает объект Range, в верхний левый угол которого будет помещена сводная таблица.
  • TableName — имя сводной таблицы. Если не указано, то автоматически сгенерируется имя вида «СводнаяТаблица1».
  • ReadData — если установить в True, то все содержимое куба будет автоматически помещено в кэш. С этим параметром нужно быть очень осторожным, поскольку неправильное его применение может резко увеличить нагрузку на клиента.
  • DefaultVersion — это свойство обычно не указывается. Позволяет определить версию создаваемой сводной таблицы. По умолчанию используется наиболее свежая версия.
Читать еще:  Как файл png перевести в word

Создание сводной таблицы в первой ячейке первого листа книги может выглядеть так:

PC1.CreatePivotTable Range («A1»)

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

  • область столбцов — в нее помещаются те измерения («разрез», в котором будут анализироваться данные), членов которых меньше;
  • область строк — те измерения, членов которых больше;
  • область страницы — те измерения, по которым нужно только проводить фильтрацию (например, показать данные только по такому-то региону или только за такой-то год);
  • область данных — собственно говоря, центральная часть таблицы. Те числовые данные (например, сумма продаж), которые мы и анализируем.

Полагаться на пользователя в том, что он правильно разместит элементы во всех четырех областях, трудно. Кроме того, это может занять определенное время. Поэтому часто требуется расположить данные в сводной таблице программным образом. Эта операция производится при помощи объекта CubeField. Главное свойство этого объекта — Orientation, оно определяет, где будет находиться то или иное поле. Например, помещаем измерение Customers в область столбцов:

PT1.CubeFields («[Customers]»).Orientation = xlColumnField

Затем — измерение Time в область строк:

PT1.CubeFields («[Time]»).Orientation = xlRowField

Затем — измерение Product в область страницы:

PT1.CubeFields («[Product]»).Orientation = xlPageField

И наконец, показатель (числовые данные для анализа) Unit Sales:

PT1.CubeFields(«[Measures].[Unit Sales]»).Orientation = xlDataField

Теперь сводная таблица создана и с ней вполне можно работать. Однако часто необходимо выполнить еще одну операцию — раскрыть нужный уровень иерархии измерения. Например, если нас интересует поквартальный анализ, то нужно раскрыть уровень Quarter измерения Time (по умолчанию показывается только самый верхний уровень). Конечно, пользователь может сделать это самостоятельно, но не всегда можно рассчитывать, что он догадается, куда щелкнуть мышью. Программным образом раскрыть, например, иерархию измерения Time на уровень кварталов для 1997 года можно при помощи объектов PivotField и PivotItem:

Создание первой сводной таблицы

Исходные данные

Сейчас на простом примере мы научимся создавать сводные таблицы и познакомимся с некоторыми их возможностями.

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

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

Советую также преобразовывать исходный диапазон данных в таблицу (ГлавнаяФорматировать как таблицу). Тогда при добавлении или удалении строк и столбцов не придется менять ссылку на этот диапазон в сводном отчете.

Рекомендуемые сводные таблицы

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

Выберите любую ячейку исходной таблицы.

Перейдите на вкладку ленты Вставка [Insert] и найдите группу Таблицы [Table].

Выберите команду Рекомендуемые сводные таблицы [Recommended PivotTables].

Выберите подходящую таблицу в списке слева. После выборы в окне справа вы увидите макет будущей таблицы.

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

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

Выберите любую ячейку исходной таблицы.

Перейдите на вкладку ленты Вставка [Insert] и найдите группу Таблицы [Table].

Выберите команду Сводная таблица [PivotTable].

В диалоговом окне Создание сводной таблицы [Create PivotTable] убедитесь в правильности диапазона данных, на основе которого будет строиться отчет. Если диапазон некорректный, его нужно поменять в поле Таблица и диапазон [Table/Range].

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

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

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

После формирования сводной таблицы в выбранном месте появиться область с ее названием. По умолчанию отчет называется СводнаяТаблица1 [PivotTable 1]. Для начала работы необходимо щелкнуть левой клавшей мыши по данной области. В результате в правой части листа откроется макет сводной таблицы.

Макет сводной таблицы состоит из списка полей сводной таблицы, в котором перечислены все заголовки исходной таблицы и четырех областей: ФИЛЬТРЫ, КОЛОННЫ, СТРОКИ и ЗНАЧЕНИЯ.

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

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

Данную операцию можно сделать еще 2 способами:

  • отметить флажок напротив поля Группа;
  • щелкнуть по полу Группа правой кнопкой мыши и выбрать Добавить в названия строк [Add to Row Labels].

После добавления поля вы увидите список всех групп, которые есть в исходной таблице:

Теперь осталось добавить сумму по полю Рыночная стоимость. Для этого перенесем поле Рыночная стоимость в область значений. Желаемая таблица получена.

VBA Pivot Table

Excel VBA Pivot Table

Pivot Tables are the heart of summarizing the report of a large amount of data. We can also automate the process of creating a pivot table through VBA coding. They are important part of any report or dashboard, in excel it is easy to create tables with a button but in VBA we have to write some codes to automate our pivot table, before excel 2007 and its older versions in VBA we did not need to create a cache for pivot tables but in excel 2010 and its newer versions caches are required.

Читать еще:  Файл pdf в формат word

VBA can save tons of time for us in our workplace, even though mastering it isn’t that easy but worth spending time to learn this. I took 6 months to understand the process of creating pivot tables through VBA. You know what those 6 months have done wonders for me because I made so many mistakes while attempting to create the pivot table.

But the actual thing is I have learned from my mistakes and now I am writing this article to show you how to create pivot tables using code.

With just a click of a button, we can create reports.

Steps to Create Pivot Table in VBA

To create a pivot table it is important to have data. For this I have created some dummy data, you can download the workbook to follow with me with the same data.

Step 1: Pivot Table is an object to reference the pivot table declare the variable as PivotTables.

Code:

Step 2: Before we create a pivot table first we need to create a pivot cache to define the source of the data.

In regular worksheet pivot table without troubling us will create a pivot cache in the background. But in VBA we have to create.

For this define the variable a PivotCache.

Code:

Step 3: To determine the pivot data range define the variable as a range.

Code:

Step 4: To insert a pivot table we need a separate sheet to add worksheet for pivot table declare the variable as a worksheet.

Code:

Step 5: Similarly to reference the data containing worksheet declare one more variable as Worksheet.

Code:

Step 6: Finally to find the last used row & column define two more variables as Long.

Code:

Step 7: Now we need to insert a new sheet to create a pivot table. Before that, if any pivot sheet is there then we need to delete that.

Step 8: Now set the object variable PSheet and DSheet to Pivot Sheet and Data Sheet respectively.

Step 9: Find the last used row and last used column in the datasheet.

Step 10: Now set the pivot range by using the last row & last column.

This will set the data range perfectly. It will automatically select the data range even if there is any addition or deletion of data in the datasheet.

Step 11: Before we create a pivot table we need to create a pivot cache. Set the pivot cache variable by using the below VBA code.

Step 12: Now create a blank pivot table.

Step 13: After inserting the pivot table we need to insert row field first. So I will insert the row field as my Country column.

Step 14: Now one more item I will insert to row field as the second position item. I will insert Product as the second line item to the row field.

Step 15: After inserting the columns to the row field we need to insert values to the column field. I will insert the “Segment” to the column field.

Step 16: Now we need to insert numbers to the data field. So insert “Sales” to the data field.

Step 17: We are done with pivot table summary part, now we need to format the table. To format pivot table use below code.

To show the row filed values items in tabular form add the below code at the bottom.

Ok, we are done if we run this code using F5 key or manually then, we should get the pivot table like this.

Like this using VBA coding, we can automate the process of creating a pivot table.

For your reference, I have given code below.

Recommended Articles

This has been a guide to VBA Pivot Table. Here we learn how to create a pivot table in excel using VBA code along with a practical example and a downloadable template. Below you can find some useful excel VBA articles –

Создание отчетов с помощью Сводных таблиц (Pivot Tables)

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

В ней каждая отдельная строка содержит полную информацию об одной кредитной сделке:

  • название заемщика
  • номер сделки
  • дата выдачи и дата погашения по кредиту
  • тип кредита
  • сумма кредита

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

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

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

Выделяем всю нашу таблицу с данными и жмем в меню Вставка — Сводная таблица ( Insert — PivotTable ).

Появится вот такое окно, в котором мы можем выбрать куда поместить нашу сводную таблицу и скорректировать диапазон данных.

По умолчанию выбрано поместить сводную таблицу на новый лист (New Worksheet) , однако мы можем, при необходимости, вручную выбрать текущий или любой другой лист книги (Existing Worksheet). Лучше для этого выбирать новый лист — тогда нет риска что сводная таблица «перекроется» с исходным списком и мы получим кучу циклических ссылок. Жмем кнопку OK и переходим к самому интересному — этапа конструирования нашего отчета.

Работа с макетом

То, что Вы увидите, нажав кнопку OK называется макет (layout) сводной таблицы:

Работать с ним несложно — надо перетаскивать мышью названия столбцов (полей) из окна Список полей сводной таблицы (PivotTable Field List) в области строк (Row Labels), столбцов (Column Lables), фильтров (Report Filter) и данных макета (Values). Единственный нюанс — делайте это точнее, не промахнитесь! Поехали.

В процессе перетаскивания сводная таблица у Вас на глазах начнет менять облик, отражая те данные, которые Вам необходимы. Перебросив все четыре нужных нам поля из списка, Вы получите практически готовый отчет. Останется его только достойно отформатировать.
Выбираем форматирование сводной таблицы в меню PivotTables Tools — Design:

И получаем следующий вид:

Не так уж это все и сложно, не так ли?

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

Categorized | excel macro and vba, pivot table

Pivot Table VBA: VBA to Read & Modify a Pivot Table in Excel

Here is a collection of VBA codes to work with Pivot Tables:

Here’s the source data for all the examples:

Create a pivot table using a VBA Macro

The sample vba code shown below helps create a pivot table.

Parts of this VBA macro that you may want to change:
SourceData = Provide a range that contains the underlying data for the pivot table. In its present form, the code simply create a pivot table by picking up all the used cells present near the active cell.
TableName = Give the Pivot Table a name that you like
TableDestination = The cell where you’d like to place the pivot table. Format to use= ‘[filename.xls]Sheet1’!R1C1

Delete all Pivot Tables Using a VBA Macro

Refer to a Pivot Table directly within a VBA Macro

You can either set the pivot table to an object or refer it directly using the index or the pivot table name.

Refer to a Pivot Table Field directly within a VBA Macro

Again, you can either set the pivot field to an object or refer it directly using the index or the name of the pivot field in the macro.

Refer to a Pivot Item of a Pivot Field present in a Pivot Table directly using a VBA Macro

Remove Old (ghost) Items from a Pivot Table using VBA Macro

Often times you will items show up in the list drop down of a particular field in pivot table even though those values do not exist in the pivot table. More likely than not, these are old items left over from the earlier data in the pivot table’s cache and still continue to appear in the table. As a good practice, if you have large amounts of data in a pivot table and that table gets updated with fresh data frequently, you may want to call this procedure to clean up the pivot table.

Refresh All Pivot Tables in a Workbook using VBA Macro

The classic case of refreshing all pivot tables in a workbook in one go. A must when you have more than a handful of pivot tables in the workbook

Refresh All Pivot Tables in an Excel Sheet using VBA Macro

This is the simple method of expanding a pivot table so that the underlying data is revealed. This requires that the pivot table store a copy of the underlying data set with it for it to work well.

Extract Data (Expand) from a Pivot Table using a VBA Macro

Remove or Include a Pivot Field in a Pivot Table using a VBA Macro

Often times we need to remove a particular field from the pivot table. The following code will help you achieve it.

In the above code, we have tried to hide all pivot fields in a pivot table. You may want to selectively remove fields by referring to them either by their index values or by their names. Example:
ActiveSheet.PivotTables(“PivotTable1”).PivotFields(“Name”).Orientation = xlHidden

To include the fields again and have them display in the pivot table, use this code:

Hide Pivot Items of Pivot Field located in a Pivot Table using a VBA Macro

The following code will help you turn off a field from the drop-down of a particular field in a pivot table

By default, atleast one pivot item needs to be left turned if you decide to hide items in the drop down of a field in a pivot table. Other wise you will have excel throwing an error which says : Run-time error ‘1004’: Unable to set the Visible property of the PivotItem class. To ensure that we do not have the error blocking the code during runtime, we insert the On Error Resume Next in our code. (You may want to read more about error handling in VBA here). To make the fields show again, simply turn them on by replacing the pit.Visible = False statement with pit.Visible = true.

Moving and change orientation of Pivot Fields in a Pivot Table using VBA Macro

Reduce time taken to update a pivot table when using a VBA macro

Pivot tables can be notoriously slow when you work with large data sets in VBA. Moving, updating and hiding items can a long time to happen. To reduce update and response time when working with Pivot Tables in VBA, try setting the update option to manual. Manual update can reduce the time taken to update and work with a pivot table by around 10% for very small tables (say 10 rows in source data) to as much as 75% in large tables (with more than 50,000 rows in source data).

You can test the improvement in speed by say comparing both the pieces of VBA code shown below. The first piece of the code will run much slower than the later.

This one will work much faster.

You can download an example of the pivot table and vba macro code here or click on the button below:

Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector
×
×