Поиск…


замечания

В Интернете много отличных справочных и примерных источников. Некоторые примеры и объяснения создаются здесь как точка сбора для быстрого ответа. Более подробные иллюстрации могут быть связаны с внешним контентом (вместо копирования существующего оригинального материала).

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

Одной из самых мощных возможностей в Excel является использование сводных таблиц для сортировки и анализа данных. Использование VBA для создания и управления Pivots проще, если вы понимаете взаимосвязь Pivot Tables с Pivot Caches и как ссылаться и использовать разные части таблиц.

В самом основном, ваши исходные данные представляют собой область Range данных на Worksheet . Эта область данных ДОЛЖНА идентифицировать столбцы данных с строкой заголовка в качестве первой строки в диапазоне. После создания сводной таблицы пользователь может просматривать и изменять исходные данные в любое время. Однако изменения не могут быть автоматически или немедленно отражены в самой сводной таблице, поскольку существует промежуточная структура хранения данных, называемая сводным кэшем, которая напрямую связана с самой сводной таблицей.

введите описание изображения здесь

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

введите описание изображения здесь

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

Sub test()
    Dim pt As PivotTable
    Set pt = CreatePivotTable(ThisWorkbook.Sheets("Sheet1").Range("A1:E15"))
End Sub

Function CreatePivotTable(ByRef srcData As Range) As PivotTable
    '--- creates a Pivot Table from the given source data and
    '    assumes that the first row contains valid header data
    '    for the columns
    Dim thisPivot As PivotTable
    Dim dataSheet As Worksheet
    Dim ptSheet As Worksheet
    Dim ptCache As PivotCache
    
    '--- the Pivot Cache must be created first...
    Set ptCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
                                                  SourceData:=srcData)
    '--- ... then use the Pivot Cache to create the Table
    Set ptSheet = ThisWorkbook.Sheets.Add
    Set thisPivot = ptCache.CreatePivotTable(TableDestination:=ptSheet.Range("A3"))
    Set CreatePivotTable = thisPivot
End Function

Ссылки Объект Pivot Table MSDN

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

Эти превосходные справочные источники предоставляют описания и иллюстрации различных диапазонов в сводных таблицах.

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

Добавление полей в сводную таблицу

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

Dim thisPivot As PivotTable
Dim ptSheet As Worksheet
Dim ptField As PivotField

Set ptSheet = ThisWorkbook.Sheets("SheetNameWithPivotTable")
Set thisPivot = ptSheet.PivotTables(1)

With thisPivot
    Set ptField = .PivotFields("Gender")
    ptField.Orientation = xlRowField
    ptField.Position = 1
    Set ptField = .PivotFields("LastName")
    ptField.Orientation = xlRowField
    ptField.Position = 2
    Set ptField = .PivotFields("ShirtSize")
    ptField.Orientation = xlColumnField
    ptField.Position = 1
    Set ptField = .AddDataField(.PivotFields("Cost"), "Sum of Cost", xlSum)
    .InGridDropZones = True
    .RowAxisLayout xlTabularRow
End With

Форматирование данных сводной таблицы

В этом примере изменяется / DataBodyRange несколько форматов в области диапазона данных ( DataBodyRange ) данной сводной таблицы. Доступны все форматируемые параметры в стандартном Range . Форматирование данных влияет только на сводную таблицу, а не на сводный кеш.

ПРИМЕЧАНИЕ: свойство называется TableStyle2 потому что свойство TableStyle не является членом свойств объекта PivotTable .

Dim thisPivot As PivotTable
Dim ptSheet As Worksheet
Dim ptField As PivotField

Set ptSheet = ThisWorkbook.Sheets("SheetNameWithPivotTable")
Set thisPivot = ptSheet.PivotTables(1)

With thisPivot
    .DataBodyRange.NumberFormat = "_($* #,##0.00_);_($* (#,##0.00);_($* "-"??_);_(@_)"
    .DataBodyRange.HorizontalAlignment = xlRight
    .ColumnRange.HorizontalAlignment = xlCenter
    .TableStyle2 = "PivotStyleMedium9"
End With


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow