こんにちは!ノグチです。
前回の記事では、エクセルVBAでピボットキャッシュからピボットテーブルを作成する方法をご紹介しました。
今回は、エクセルVBAで作成したピボットテーブルに、これまたエクセルVBAで行、列、値のフィールドを追加する方法をご紹介します!
前回までご紹介した内容と今回ご紹介する内容を使えば、ピボットテーブル作成からフィールドの設定まで完全自動化だってできますよ!
AddFieldsメソッドで行と列フィールドを追加する
まずは、ピボットテーブルに行と列フィールドを追加する方法から。
そのためには、PivotTableオブジェクトのAddFieldsメソッドを使います。
AddFieldsメソッドは、ピボットテーブルに行、列フィールドを追加するメソッドです。
記述方法はこちら。
各オプションの使い方は、この「月別仕入表」というピボットテーブルを使って見ていきましょう。
ColumnFieldsオプションで列に追加するフィールドを指定
ピボットテーブルの列フィールドに追加する項目を指定するオプションです。
先にお見せしたピボットテーブル「月別仕入表」で、このピボットテーブルの列に「品目」フィールドを追加したい場合、下記のように記述します。
ActiveSheet.PivotTables("月別仕入表").AddFields ColumnFields:=Array("品目")
そしてこのコードをピボットテーブル「月別仕入表」で実行してみると…
真っ白だったピボットテーブルの列に、「品目」フィールドが追加されていますね。
RowFieldsオプションで行に追加するフィールドを指定
ピボットテーブルの行フィールドに追加する項目を指定するプロパティです。
使用例はこちら。
ActiveSheet.PivotTables("月別仕入表").AddFields RowFields:=Array("仕入日")
では、こちらの例も列に「品目」を追加した「月別仕入表」で実行してみましょう。
この通り、RowFieldsオプションで指定したフィールドが、ピボットテーブルの行に追加されています。
これで、行と列のフィールドは追加できました!
AddDataFieldメソッドで値フィールドを追加する
お次は、 PivotTableオブジェクトのAddDataFieldメソッドを使って、ピボットテーブルに値フィールドを追加していきましょう。
AddDataFieldメソッドは、ピボットテーブルに値フィールドを追加するメソッドです。
記述方法はこちら。
Fieldオプションで追加する値フィールドを指定する
ピボットテーブルの値フィールドに追加したい項目を指定するオプションで、AddDataFieldメソッドの必須項目です。
例えばこんな感じで記述します。
ActiveSheet.PivotTables("月別仕入表").AddDataField Field:=PivotS.PivotTables("月別仕入表").PivotFields("仕入数")
AddFieldsと違って、こちらは項目を PivotFieldsオブジェクトで指定するので、お間違えのなきよう。
Captionオプションで項目名を指定する
ピボットテーブルに追加する値フィールドの項目名を指定するオプションです。
例えば、「仕入数」という項目を「数量」という項目名でピボットテーブルに追加したい場合は、こんな風に記述します。
PivotS.PivotTables("月別仕入表").AddDataField Field:=PivotS.PivotTables("月別仕入表"). _
PivotFields("仕入数"),Caption:="数量"
必須項目ではなく、このオプションを使わないで項目を追加した場合は値フィールドの名前は元の項目名のままでピボットテーブルに追加されます。
Functionオプションで値フィールドに使用する関数を指定する
値フィールドに表示する値に使用する関数を指定するオプションです。
関数って…?と思われたかもしれませんが、ピボットテーブルの値フィールドは、「値フィールドの設定」で集計方法を指定できますよね。
これこれ。
Functionは、この「合計」や「データの個数」を指定するオプションです。
例えば、ピボットテーブルの値フィールドの合計を表示したい場合は、こんな感じで記述します。
PivotS.PivotTables("月別仕入表").AddDataField Field:=PivotS.PivotTables("月別仕入表"). _
PivotFields("仕入数"), Caption:="数量", Function:=xlSum
AddFieldsメソッドとAddDataFieldメソッドでピボットテーブルにフィールドを追加する
サンプルプログラム
では、上でお見せしたピボットテーブル「月別仕入表」の列に「品目」、行に「仕入日」、値に「仕入数」を追加するコードを実行してみます。
「月別仕入表」は、「ピボットテーブル」というシートに作成していることとします。
コードはこちら。
Sub Add_PivotFields()
Dim PivotS As Worksheet 'ピボットテーブルがあるシート
Set PivotS = ThisWorkbook.Worksheets("ピボットテーブル")
'ピボットテーブルに行と列フィールドを追加
PivotS.PivotTables("月別仕入表").AddFields ColumnFields:=Array("品目"), _
RowFields:=Array("仕入日")
'ピボットテーブルに値フィールドを追加
PivotS.PivotTables("月別仕入表").AddDataField _
Field:=PivotS.PivotTables("月別仕入表").PivotFields("仕入数"), _
Caption:="数量", _
Function:=xlSum
End Sub
サンプルプログラムの実行結果
上のコードを実行した結果がこちら。
真っ白だったピボットテーブルに、行も列も値も追加されていますね。
これで、ピボットテーブルのフィールドに項目が追加できました!
まとめ
今回は、すでに作成されたピボットテーブルに、フィールドを追加する方法をご紹介しました。
今回の内容と、前回、前々回のピボットキャッシュ作成~ピボットテーブル作成と組み合わせれば、フィールドがセットされたピボットテーブル作成まで一気通貫で作成することも可能ですね。
それでは、最後までお読みいただきありがとうございました!
コメント
PivotFields(“品目”)やPivotFields(“仕入日”)という表現がありますが、
それぞれarray(“品目”)、array(“仕入日”)ですね。
通りすがりさん
こんにちは!
コードのご指摘ありがとうございました。ご指摘いただいた個所を修正させて頂きました。
今後とも当ブログをどうぞ宜しくお願いいたします。