ピボットテーブルの備忘録 ② クラス化(2)フィールド
先日から、マクロによるピボットテーブルの扱いを纏めている(備忘録)。
昨日はクラスモジュールで、集計直前のピボットテーブルを作成した。
infoment.hatenablog.com
今日は、各フィールドをセットしてみる。
↓ いつもの「なんちゃって個人情報」からデータ拝借。
手動で作成する場合、以下4つの任意のフィールドに項目をセットする。
例えば、↓ こんな感じだ。
これら4つのフィールドは、VBAでは次のように指定する。
docs.microsoft.com
具体的には、こちらのとおり。
- xlPageField :フィルター
- xlRowField :行
- xlColumnField:列
- xlDataField :値
クラスモジュール(PvtTable)
以上を踏まえ、昨日のクラスモジュールに以下を追加した。
' 各フィールドの設定。 Public Sub SetFields(field_orientation As XlPivotFieldOrientation, _ ParamArray field_names()) ' ピボットテーブルの作成済み確認。 If Pvt Is Nothing Then Exit Sub ' フィールドをセット。 ' field_orientationの内訳は下記のとおり。 ' ① xlPageField :フィルター ' ② xlRowField :行 ' ③ xlColumnField:列 ' ④ xlDataField :値 ' フィルターはセットした順に位置が下になるので、指定した ' フィールド名の最後から逆順でセットする。 Dim i As Long Select Case field_orientation Case xlPageField For i = UBound(field_names) To 0 Step -1 Pvt.PivotFields(field_names(i)).Orientation = field_orientation Next Case Else For i = 0 To UBound(field_names) Pvt.PivotFields(field_names(i)).Orientation = field_orientation Next End Select End Sub
例えば今回のなんちゃって個人情報で「都道府県」を指定する場合、
- ラベル名:"都道府県" で指定
- テーブルの列番号:9で指定
のどちらでも可能だ。
それでは、テストしてみよう。
Sub Test() Dim PvtTable As VBAProject.PvtTable Set PvtTable = New VBAProject.PvtTable If PvtTable.MakePivotTable(ActiveSheet.ListObjects(1)) = False Then MsgBox "ピボットテーブルの作成に失敗しました。" Exit Sub End If With PvtTable ' 各フィールドを設定。 .SetFields xlPageField, "カレーの食べ方", "キャリア" .SetFields xlRowField, "都道府県", "性別" .SetFields xlColumnField, "婚姻" .SetFields xlDataField, 6 End With End Sub
結果は、以下のとおり。
明日に続きます。
参考まで。