'ピボットテーブルの作成
Set A = Worksheets("元データ").Range("A1").CurrentRegion '元データの範囲を設定
ActiveWorkbook.PivotCaches.Create(xlDatabase, A).CreatePivotTable Range("A3") '作成する'フィールドの設定
With ActiveSheet.PivotTables(1)
.PivotFields("商品").Orientation = xlRowField '行フィールドを設定
.PivotFields("商品").Orientation = xlColumnField '列フィールドを設定
.PivotFields("商品").Orientation = xlPageField 'フィルターフィールドを設定
.PivotFields("売上").Orientation = xlDataField '値フィールドを設定
End With
'「合計」の値フィールドを設定
With ActiveSheet.PivotTables(1).PivotFields("売上")
.Orientation = xlDataField '値フィールドを設定
.Function = xlSum '「合計」で集計する
End With
'「平均」の値フィールドを設定
With ActiveSheet.PivotTables(1).PivotFields("売上")
.Orientation = xlDataField '値フィールドを設定
.Function = xlAverage '「平均」で集計する
End With
'集計方法を「平均」に変更する
ActiveSheet.PivotTables(1).PivotFields("合計 / 売上").Function = xlAverage
'集計方法を「合計」に変更する
ActiveSheet.PivotTables(1).PivotFields("平均 / 売上").Function = xlSum
では、解説していきます。
VBAでピボットテーブルを作成する
VBAでピボットテーブルを作成します。
作成してみる
元データから、ピボットテーブルを作成するVBAコードは、こんな感じです。
Sub TEST1()
'シートを追加
Sheets.Add
'元データの範囲を格納
Set A = Worksheets("元データ").Range("A1").CurrentRegion
'ピボットテーブルを作成
ActiveWorkbook.PivotCaches.Create(xlDatabase, A).CreatePivotTable Range("A3")
End Sub
手順としては、
シートを追加
元データをオブジェクトに格納
元データをキャッシュしてピボットテーブルを作成
という流れです。
実行してみます。
元データを用意します。
元データを用意
では、VBAコードを実行してみます。
ピボットテーブルが作成できた
ピボットテーブルが作成できました。
VBAでピボットテーブルのフィールドを設定
VBAで、ピボットテーブルのフィールドを設定してみます。
フィールドの種類は、4種類あります。
行フィールド
列フィールド
フィルターフィールド
値フィールド
という感じです。
それぞれのフィールドに設定する方法をみていきます。
行フィールドを設定
行フィールドを設定するVBAコードは、こんな感じです。
Sub TEST2()
With ActiveSheet.PivotTables(1).PivotFields("商品")
.Orientation = xlRowField '行フィールドを設定
.Position = 1 '1番目にする
End With
End Sub
Sub TEST3()
With ActiveSheet.PivotTables(1).PivotFields("商品")
.Orientation = xlColumnField '列フィールドを設定
.Position = 1 '1番目にする
End With
End Sub
「.Orientation = xlColumnField」で列フィールドに設定してます。
列フィールドを設定する前の初期のピボットテーブルです。
初期状態のピボットテーブル
では、VBAコードを実列してみます。
「列」フィールドを設定できた
列フィールドを設定できました。
フィルターフィールドを設定
フィルターフィールドを設定するVBAコードは、こんな感じです。
Sub TEST4()
With ActiveSheet.PivotTables(1).PivotFields("商品")
.Orientation = xlPageField 'フィルターフィールドに設定
.Position = 1 '1番目にする
End With
End Sub
「.Orientation = xlPageField」でフィルターフィールドに設定してます。
フィルターフィールドを設定する前の、初期のピボットテーブルです。
初期状態のピボットテーブル
では、VBAコードを実列してみます。
「フィルター」フィールドを設定できた
フィルターフィールドを設定できました。
値フィールドを設定
値フィールドを設定するVBAコードは、こんな感じです。
Sub TEST5()
With ActiveSheet.PivotTables(1).PivotFields("売上")
.Orientation = xlDataField '値フィールドに設定
.Position = 1 '1番目にする
End With
End Sub
「.Orientation = xlDataField」で値フィールドに設定してます。
値フィールドを設定する前の初期のピボットテーブルです。
初期状態のピボットテーブル
では、VBAコードを実値してみます。
「値」フィールドを設定できた
値フィールドを設定できました。
ピボットテーブルの作成と設定のVBAコードをまとめる
ピボットテーブルを作成して設定するVBAコードを、まとめて実行してみます。
クロス集計表を作成
元データから、クロス集計表を作成するVBAコードは、こんな感じになります。
Sub TEST6()
'シートを追加する
Sheets.Add
'元データの範囲を格納
Set A = Worksheets("元データ").Range("A1").CurrentRegion
'ピボットテーブルを作成する
ActiveWorkbook.PivotCaches.Create(xlDatabase, A).CreatePivotTable Range("A3")
'フィールドを設定
With ActiveSheet.PivotTables(1)
.PivotFields("商品").Orientation = xlRowField '行フィールドを設定
.PivotFields("支店").Orientation = xlColumnField '列フィールドを設定
.PivotFields("売上").Orientation = xlDataField '値フィールドを設定
End With
End Sub
元データを用意しました。
元データを用意
では、VBAコードを実行してみます。
クロス集計表を作成できた
VBAを使って、ピボットテーブルでクロス集計表を作成できました。
VBAで値フィールドの集計種類を設定する
VBAで、値フィールドの「集計種類」を設定してみます。
集計種類は、「合計」とか「平均」、「個数」といったものです。
ポイントは、値フィールドを設定する際に、集計種類を設定することです。
「合計」の値フィールドを設定
「合計」の値フィールドを設定するVBAコードは、こんな感じになります。
Sub TEST7()
With ActiveSheet.PivotTables(1).PivotFields("売上")
.Orientation = xlDataField '値フィールドを設定
.Function = xlSum '「合計」を設定
End With
End Sub
行と列フィールドを設定した、ピボットテーブルを用意しました。
行と列フィールドを設定したピボットテーブル
では、実行してみます。
「合計」の値フィールドを設定できた
値フィールドの集計の種類を「合計」に設定できました。
設定した後ではなく、設定する際に、集計の種類を設定しましょう。
「平均」の値フィールドを設定
続いて、「平均」の値フィールドを設定するVBAコードは、こんな感じになります。
Sub TEST8()
With ActiveSheet.PivotTables(1).PivotFields("売上")
.Orientation = xlDataField '値フィールドを設定
.Function = xlAverage '「平均」を設定
End With
End Sub
行と列フィールドを設定した、ピボットテーブルを用意しました。
行と列フィールドを設定したピボットテーブル
では、実行してみます。
「平均」の値フィールドを設定できた
値フィールドの集計の種類を「平均」に設定できました。
値フィールドの集計種類の一覧
値フィールドの集計種類をまとめました。
こんな感じになります。
合計:xlSum
個数:xlCount
平均:xlAverage
最大:xlMax
最小:xlMin
積:xlProduct
重複しない値の数:xlCountNums
標本標準偏差:xlStDev
標準偏差:xlStDevP
標本分散:xlVar
分散:xlVarP
作成したい集計の種類を選択して、値フィールドを設定しましょう。
VBAで値フィールドの集計種類を変更する
VBAで、値フィールドの集計種類を変更することもできます。
既に設定されている集計種類を、変更してみます。
「合計」を「平均」に変更する
値フィールドの集計種類を、「合計」から「平均」に変更するVBAコードは、こんな感じです。
Sub TEST9()
With ActiveSheet.PivotTables(1).PivotFields("合計 / 売上")
.Function = xlAverage '「平均」に変更
End With
End Sub