今回は、私がよく使用する、実用的(だと思っている)ピボットテーブル作成用プログラムの一例をご紹介します。
ピボットテーブルの作成例
ピボットテーブルについて細々とご紹介すると非常に長くなってしまうのですが、
今回は日頃の事務作業などにおいて実用的だと思われる、私が日頃よく使うサンプルに絞ってご紹介します。
今回は、下記画像の表が「データ」という名前のシートに存在するものとしてご紹介します。
ページ下部のサンプル1のプログラムを元にご紹介しますと、全体的な流れとしては、まずピボットテーブル作成用の「ピボット」シートを用意したいのですが、すでに「ピボット」シートが存在していた場合はエラーが発生してしまいますので、
For Each ws In Worksheets
If ws.Name = “ピボット” Then flag = True
Next ws
If flag = True Then
Set pivot = Worksheets(“ピボット”)
Application.DisplayAlerts = False
pivot.Delete
Application.DisplayAlerts = True
End If
で、既に「ピボット」シートが存在していた場合は削除します。
その後、
Set PCache = ActiveWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, _
SourceData:=data.Range(data.Columns(1), data.Columns(3)))
で、ピボットテーブル作成用のデータとなるキャッシュを作成した後、
Worksheets.Add After:=data
ActiveSheet.Name = “ピボット”
Set pivot = Worksheets(“ピボット”)
で「データ」シートの後ろに改めて「ピボット」シートを作成し、変数pivotに代入しています。
そして「ピボット」シートにピボットテーブルを作成しますが、まず、
PCache.CreatePivotTable _
TableDestination:=pivot.Range(“A3”), _
TableName:=”集計テーブル”
で作成するピボットテーブルの左上端のセルはA3、ピボットテーブルの名前は「集計テーブル」としています。
ピボットテーブルの設定はそれぞれ、
・グリッド内のドロップ ゾーンを表示
InGridDropZones = True
・従来のピボットテーブルレイアウト
RowAxisLayout xlTabularRow
・列の総計を非表示
ColumnGrand = False
・行の総計を非表示
RowGrand = False
・アイテムのラベルをすべて繰り返す
RepeatAllLabels xlRepeatLabels
・小計を非表示にする
For Each pv_fld In .PivotFields
pv_fld.Subtotals(1) = True
pv_fld.Subtotals(1) = False
Next pv_fld
としています。
ピボットテーブルの行の設定は、
PivotFields(“種別”).Orientation = xlRowField
で「種別」をピボットテーブルの行に設定し、
PivotFields(“種別”).PivotItems(“(blank)”).Visible = False
で「種別」の空白を非表示にしています。
また今回は一例として、
For Each pv_itm In .PivotFields(“種別”).PivotItems
Select Case pv_itm.Caption
Case “野菜”
pv_itm.Visible = True
Case Else
pv_itm.Visible = False
End Select
で、「種別」のフィルタで「野菜」のみにチェックを入れる設定をしています。
この部分の考えかたとしては、
Case “野菜”
pv_itm.Visible = True
でピボットアイテムが野菜の場合はチェックを入れ、
Case Else
pv_itm.Visible = False
で野菜以外のチェックを外すようにしています。
最後に、
.AddDataField Field:=pivot.PivotTables(“集計テーブル”).PivotFields(“価格”), Function:=xlSum
で、「価格」をピボットテーブルの値に設定し、値フィールドの集計を「合計」にしています。
・サンプル1
Sub ピボット() Dim data As Worksheet ‘元データシート用変数 Dim PCache As PivotCache ‘ピボットキャッシュ用変数 Dim ws As Worksheet ‘『ピボット』シートが存在していた場合、いったん削除して新たに作成 Set pivot = Worksheets(“ピボット”) Application.DisplayAlerts = False End If Set data = Worksheets(“データ”) ‘『データ』シートからピボットテーブル作成用のキャッシュを作成 ‘ピボットテーブル作成用の『ピボット』シートを追加 Set pivot = Worksheets(“ピボット”) ‘『ピボット』シートにピボットテーブル作成 With ActiveSheet.PivotTables(“集計テーブル”) ‘小計を非表示にする .PivotFields(“種別”).Orientation = xlRowField ‘「種別」をピボットテーブルの行に設定 ‘「種別」のフィルタで「野菜」のみにチェックを入れる .AddDataField Field:=pivot.PivotTables(“集計テーブル”).PivotFields(“価格”), Function:=xlSum ‘「価格」をピボットテーブルの値に設定し、値フィールドの集計を「合計」にする End With End Sub |