Другой способ работы со сводными таблицами

Option Explicit

Sub CreatePivotTable()
    Dim PTcache As PivotCache
    Dim pt As PivotTable
    
    Application.ScreenUpdating = False
'   Удаление существующего листа сводной таблицы
    On Error Resume Next
    Application.DisplayAlerts = False
    Sheets("Сводная таблица").Delete
    On Error GoTo 0
    
'   Создание кеэша сводной таблицы
    Set PTcache = ActiveWorkbook.PivotCaches.Create( _
      SourceType:=xlDatabase, _
      SourceData:=Range("A1").CurrentRegion.Address)

'   Добавление нового листа
    Worksheets.Add
    ActiveSheet.Name = "Сводная таблица"
    ActiveWindow.DisplayGridlines = False

'   Создание сводной таблицы на основе кеша
    Set pt = ActiveSheet.PivotTables.Add( _
      PivotCache:=PTcache, _
      TableDestination:=Range("A1"), _
      TableName:="BudgetPivot")
    
    With pt
'       Добавление полей
        .PivotFields("Категория").Orientation = xlPageField
        .PivotFields("Подразделение").Orientation = xlPageField
        .PivotFields("Отдел").Orientation = xlRowField
        .PivotFields("Месяц").Orientation = xlColumnField
        .PivotFields("План").Orientation = xlDataField
        .PivotFields("Факт").Orientation = xlDataField
        .DataPivotField.Orientation = xlRowField
    
'       Добавление вычисляемого поля, подсчитывающего отклонение
        .CalculatedFields.Add "Отклонение", "=План-Факт"
        .PivotFields("Отклонение").Orientation = xlDataField
        
'       Применение числового формата
        .DataBodyRange.NumberFormat = "0 000"
        
'       Применение стиля
        .TableStyle2 = "PivotStyleMedium2"
        
'       Скрытие заголовков полей
        .DisplayFieldCaptions = False
        
'       Изменение заглавий
        .PivotFields("Сумма по полю План").Caption = " План"
        .PivotFields("Сумма по полю Факт").Caption = " Факт"
        .PivotFields("Сумма по полю Отклонение").Caption = " Отклонение"
    End With
End Sub


ExamplesRUS

Добавить комментарий

Ваш адрес email не будет опубликован.