ピボットテーブルの備忘録 ② クラス化(3)表形式で表示

先日から、マクロによるピボットテーブルの扱いを纏めている(備忘録)。
昨日はクラスモジュールで、ピボットテーブルの各フィールドをセットする
ところまでを作成した。
infoment.hatenablog.com

今日は、作成したピボットテーブルの表示形式を変えてみる。
f:id:Infoment:20200315164049p:plain

今日と明日は、完全に個人的な好みのお話。
ピボットテーブルはいつも、以下の表示形式としている。

  • 小計は表示しない。
  • 表形式で表示。

理由は、ピボットテーブルが縦に長くなるうえ、見づらくなるから(私見)。
昨日のピボットテーブルを引き合いに出して言うと、左が作成したままの状態で、右が上記条件に合わせた状態だ。

f:id:Infoment:20200315164441p:plain

そこで今回は、先日から作成しているクラスモジュール : 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

 
結果が ↓ こちら。今回も、上手く行ったようだ。
f:id:Infoment:20200315165834g:plain

明日も引き続き、個人的趣味の世界をお届けします。

参考まで。