ピボットテーブルの備忘録 ⑤独自のテーブルスタイル設定
先日から、マクロによるピボットテーブルの扱いを纏めている(備忘録)。
先日は、マクロによる集計フィールドの追加に挑戦した。
infoment.hatenablog.com
今日は、ちょっと寄り道。指定した範囲をテーブル化するために、まずオリジナルのテーブルスタイルをマクロで作成する。
Excelには最初から、幾つかのスタイルが準備されている。
これ以外にも、ユーザーで任意のスタイルを作成して設定可能だ。
今回は、任意のスタイルを作成するマクロを、先日からのクラスモジュールに追加してみよう。
ピボットテーブル作成用クラスモジュールに、テーブルに関する機能を付すことに迷いがある。何でも盛り込み過ぎれば、いわゆる「神のクラス」化する恐れがあるから。
でも今回は、難しいことは考えずに、取り敢えず追加してみた。
Public Function SetPersonalTableStyle() As TableStyle Dim TableStyle As Excel.TableStyle ' 作成済みの場合、エラーになる。 On Error Resume Next Set TableStyle = ActiveWorkbook.TableStyles.Add("PersonalTableStyle01") If Err.Number <> 0 Then Set SetPersonalTableStyle = ActiveWorkbook.TableStyles("PersonalTableStyle01") Exit Function End If ' テーブルスタイルを表示して、選択可能にする。 TableStyle.ShowAsAvailableTableStyle = True Dim ElementTypeIndex As Variant Dim BordersIndex As Variant ' 以下は個人的好みを反映したものであるため、任意に変更可。 ' 全体と見出し行を設定。 For Each ElementTypeIndex In Array(xlWholeTable, xlHeaderRow) With TableStyle.TableStyleElements.Item(ElementTypeIndex) ' 一旦すべての罫線を削除する。 .Borders.LineStyle = xlNone .Borders(xlInsideHorizontal).LineStyle = xlNone .Borders(xlInsideVertical).LineStyle = xlNone ' 上下の罫線を設定。 For Each BordersIndex In Array(xlEdgeTop, xlEdgeBottom) With .Borders(BordersIndex) .ThemeColor = xlThemeColorLight1 .TintAndShade = 0.5 .Weight = xlThin End With Next End With Next ' 見出し行の塗りつぶし設定。 With TableStyle.TableStyleElements.Item(xlHeaderRow) With .Interior .ThemeColor = xlThemeColorDark1 .TintAndShade = -0.05 End With End With Set SetPersonalTableStyle = TableStyle End Function
こちらで特徴的なのが、↓ 最近教わったこの個所。
For Each ElementTypeIndex In Array(xlWholeTable, xlHeaderRow)
例えば、1,2,4,5,11,14,22番目の何かに対して、繰り返し処理をしたいとする。繰り返しなのでFor Next構文を使いたいが、上記数群には何の法則も見出せない。あるかもしれないが、相当複雑な式になる恐れがある。そんな時は配列に入れたうえで、繰り返し処理すると便利だ。
↓ サンプル。
Sub hoge() Dim i As Variant For Each i In Array(1, 2, 4, 5, 11, 14, 22) Debug.Print i Next End Sub
↓ 結果。
今回作成したコードでは、
- テーブル全体に対して
- テーブルの見出し行について
のように任意の一部に対し同じ処理を行っていて、この方式にお世話になった。
結果、出来上がったスタイルを適用すると、こうなった。
準備は整った。
明日に続きます。
参考まで。