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

先日から、マクロによるピボットテーブルの扱いを纏めている(備忘録)。
先日は、集計方法の変更に挑戦してみた。
infoment.hatenablog.com

今日は、表示形式の変更に挑戦する。
f:id:Infoment:20200319224248p:plain

昨日は、年齢が「合計」で集計されていたため、集計方法を「平均」に切り替えてみた。しかし単純に切り替えると、割り切れない場合は小数点以下が長々と連続して、見栄えが悪い。
f:id:Infoment:20200319224924p:plain

そこで今回、↓ こちらに準備されている書式を準備してみた。
f:id:Infoment:20200319225046p:plain

Enum FormatType
    ft標準
    ft数値
    ft通貨
    ft会計
    ft短い日付形式
    ft長い日付形式
    ft時刻
    ftパーセンテージ
    ft分数
    ft指数
    ft文字列
    ft桁区切り
    [_ft_eLast]
End Enum
' データ範囲の書式変更
Public Sub SetFormat(Optional format_type As FormatType = ft桁区切り)
    With Pvt.DataBodyRange
        Select Case format_type
            Case ft標準: .NumberFormatLocal = "G/標準"
            Case ft数値: .NumberFormatLocal = "0_);[赤](0)"
            Case ft通貨: .NumberFormatLocal = "\#,##0_);[赤](\#,##0)"
            Case ft会計: .NumberFormatLocal = "_ \* #,##0_ ;_ \* -#,##0_ ;_ \* ""-""_ ;_ @_ "
            Case ft短い日付形式: .NumberFormatLocal = "yyyy/m/d"
            Case ft長い日付形式: .NumberFormatLocal = "[$-F800]dddd, mmmm dd, yyyy"
            Case ft時刻: .NumberFormatLocal = "[$-F400]h:mm:ss AM/PM"
            Case ftパーセンテージ: .NumberFormatLocal = "0%"
            Case ft分数: .NumberFormatLocal = "# ?/?"
            Case ft指数: .NumberFormatLocal = "0.E+00"
            Case ft文字列: .NumberFormatLocal = "@"
            
            Case ft桁区切り: .Style = "Comma [0]"
        End Select
    End With
End Sub

なお「書式」と言いながら、初期値に選んだ「桁区切り」が「Style」である点は、ご愛敬ってことで。

テストコードは、こちらになる。

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
            
            ' 平均値で集計。
            .SetValueVield xlAverage
            
            ' 書式を桁区切りに。
            .SetFormat ft桁区切り
        End With
End Sub

今回増えたのは、↓ この個所だ。

            ' 書式を桁区切りに。
            .SetFormat ft桁区切り

結果は ↓ こちら。
f:id:Infoment:20200319225555g:plain

だいぶん形になってきたが、普段の手間からみれば、もう少し追加が必要だ。

という訳で、さらに続きます。

参考まで。