ピボットテーブルの備忘録 ②クラス化(6)表示形式
先日から、マクロによるピボットテーブルの扱いを纏めている(備忘録)。
先日は、集計方法の変更に挑戦してみた。
infoment.hatenablog.com
今日は、表示形式の変更に挑戦する。
昨日は、年齢が「合計」で集計されていたため、集計方法を「平均」に切り替えてみた。しかし単純に切り替えると、割り切れない場合は小数点以下が長々と連続して、見栄えが悪い。
そこで今回、↓ こちらに準備されている書式を準備してみた。
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桁区切り
結果は ↓ こちら。
だいぶん形になってきたが、普段の手間からみれば、もう少し追加が必要だ。
という訳で、さらに続きます。
参考まで。