ピボットグラフを作成するVBA

得られる効果

下のような家計簿のデータベースから、
f:id:bimori466:20200405083119p:plain

下のようなピボットテーブルとグラフを作成します。
f:id:bimori466:20200405083946p:plain

今回は特定の月のグラフを作成します。

作成手順

1 用意した表から、ピボットテーブルを作成。
2 ピボットテーブルに項目を代入。
3 ピボットグラフを作成(横棒グラフ)

モジュールの中身

Sub pibot_make()

Dim DataS As Worksheet 'データシート
Dim PCache As PivotCache 'ピボットキャッシュ格納用変数
 
Set DataS = ActiveWorkbook.Worksheets("食材単価DB")
 
'ピボットテーブルキャッシュに、「データ」シートのセル範囲をセット
Set PCache = ActiveWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, _
SourceData:=DataS.Range("A1").CurrentRegion)


'『ピボットテーブル』シートを追加
Worksheets.Add
ActiveSheet.Name = "食費PBTテーブル"
Set PivotS = ThisWorkbook.Worksheets("食費PBTテーブル")


'『ピボットテーブル』シートにピボットテーブル作成
PCache.CreatePivotTable _
        TableDestination:=PivotS.Range("A1"), _
        TableName:="食費集計"
        
With Worksheets("食費PBTテーブル").PivotTables("食費集計")
    .ColumnGrand = True
    .HasAutoFormat = True
    .DisplayErrorString = False
    .DisplayNullString = True
    .EnableDrilldown = True
    .ErrorString = ""
    .MergeLabels = False
    .NullString = ""
    .PageFieldOrder = 2
    .PageFieldWrapCount = 0
    .PreserveFormatting = True
    .RowGrand = True
    .SaveData = True
    .PrintTitles = False
    .RepeatItemsOnEachPrintedPage = True
    .TotalsAnnotation = False
    .CompactRowIndent = 1
    .InGridDropZones = True
    .DisplayFieldCaptions = True
    .DisplayMemberPropertyTooltips = False
    .DisplayContextTooltips = True
    .ShowDrillIndicators = True
    .PrintDrillIndicators = False
    .AllowMultipleFilters = True
    .SortUsingCustomLists = True
    .FieldListSortAscending = False
    .ShowValuesRow = True
    .CalculatedMembersInFilters = False
    .RowAxisLayout xlTabularRow
End With


'項目設定
With Worksheets("食費PBTテーブル").PivotTables("食費集計").PivotFields("年")
    .Orientation = xlRowField
    .Position = 1
End With
With Worksheets("食費PBTテーブル").PivotTables("食費集計").PivotFields("月")
    .Orientation = xlRowField
    .Position = 2
End With
With Worksheets("食費PBTテーブル").PivotTables("食費集計").PivotFields("分類")
    .Orientation = xlRowField
    .Position = 3
End With

Worksheets("食費PBTテーブル").PivotTables("食費集計").AddDataField ActiveSheet.PivotTables( _
        "食費集計").PivotFields("合計単価"), "合計 / 合計単価", xlSum


'ピボットグラフ作成
Worksheets("食費PBTテーブル").Shapes.AddChart2(Style:=216, XlChartType:=xlBarClustered, Left:=200, Top:=20, Width:=400, Height:=400).Select

'データラベル
Worksheets("食費PBTテーブル").ChartObjects("グラフ 1").Chart.SetElement (msoElementDataLabelCenter)

'フィルター
With Worksheets("食費PBTテーブル").ChartObjects("グラフ 1").Chart.PivotLayout.PivotTable.PivotFields("月")
    .PivotItems("2").Visible = False
End With


End Sub

モジュールの解説

まず、ピボットテーブルを作成するにあたって、知っておくべきことは「ピボットキャッシュ(PivotCache)」を作成してから、「ピボットテーブル」を作成するということです。


ピボットキャッシュの作成とは、範囲指定のことです。どこからどこまでのデータを扱うのかを指定するということです。指定したピボットキャッシュから、ピボットテーブルを作成します。

PivotCaches.Create構文
PivotCaches.Create(SourceType:=xlDatabase, SourceData:=データソースの範囲)

作成したモジュールでは、変数「PCache」に「PivotCaches.Create(~」、の構文を代入しています。
で、作成したピボットキャッシュから、ピボットテーブルを作成します。

CreatePivotTable構文
PivotCacheオブジェクト.CreatePivotTable TableDestination:=位置指定, TableName:=ピボットテーブル名

これでピボットテーブルが完成。
あとは、項目を配置する。

題目のピボットグラフを作成するのは、「AddChart2」を使います。

AddChart2メソッドの記述方法
Shapesオブジェクト.AddChart2(プロパティ)

作成したモジュールでは、データラベルを追加して月フィルターで3月のみ表示されるようにしています。
これで完成。

まとめると、PivotCache → CreatePivotTable → AddChart2。
ピボットテーブル作成からグラフ作成までの流れ。

以上です。


応用として、指定した月のグラフを作成するとかいろいろできそうです。
とりあえずのピボットグラフ作成のひな形として。