ピボットテーブルの備忘録 ② クラス化(3)表形式で表示
先日から、マクロによるピボットテーブルの扱いを纏めている(備忘録)。
昨日はクラスモジュールで、ピボットテーブルの各フィールドをセットする
ところまでを作成した。
infoment.hatenablog.com
今日は、作成したピボットテーブルの表示形式を変えてみる。
今日と明日は、完全に個人的な好みのお話。
ピボットテーブルはいつも、以下の表示形式としている。
- 小計は表示しない。
- 表形式で表示。
理由は、ピボットテーブルが縦に長くなるうえ、見づらくなるから(私見)。
昨日のピボットテーブルを引き合いに出して言うと、左が作成したままの状態で、右が上記条件に合わせた状態だ。
そこで今回は、先日から作成しているクラスモジュール : PvtTableのメンバーとして、以下のメソッドを作成・追加してみよう。
クラスモジュール(PvtTable)
表形式で表示。
初期値として「表形式表示」をセットするが、他の形式も選べるようにしておく。
' レポートのレイアウト変更。 Public Sub SetRowAxisLayout(Optional layout_row_type As XlLayoutRowType = xlTabularRow) ' ピボットテーブルの作成済み確認。 If Pvt Is Nothing Then Exit Sub Pvt.RowAxisLayout layout_row_type End Sub
小計の表示設定
これに関しては、↓ こちらから丸々お知恵を拝借した(ありがとうございます)。
www.relief.jp
' 小計の表示設定。 Public Sub SetSubTotals(Optional subtotal_visible As Boolean = False, _ Optional subtotal_location As XlSubtototalLocationType = xlAtBottom) Select Case subtotal_visible ' 小計を表示する場合。 Case True Pvt.SubtotalLocation subtotal_location ' 小計を表示しない場合。 Case False On Error Resume Next For Each PvtField In Pvt.PivotFields PvtField.Subtotals(1) = True PvtField.Subtotals(1) = False Next End Select End Sub
途中に、エラー無視の行を追加した。
On Error Resume Next
現象のみの確認と理解なのだが、xlColumnFieldが複数の場合、何故かここで
エラー終了してしまう。小計の非表示化が済んだのちであるため、取り敢えず
エラー無視でお茶を濁してみた。
それでは、今回追加分を併せて試してみよう。
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 ' 表形式で表示。 .SetRowAxisLayout layout_row_type:=xlTabularRow ' 小計を非表示。 .SetSubTotals subtotal_visible:=False End With End Sub
結果が ↓ こちら。今回も、上手く行ったようだ。
明日も引き続き、個人的趣味の世界をお届けします。
参考まで。