アウトラインの展開
折りたたんだ行・列(グループ化されたアウトライン)を「一気に展開」したり、「指定レベルまで展開」するための定番コードを整理します。基本は ActiveSheet.Outline.ShowLevels を使い、RowLevels(行)と ColumnLevels(列)を指定します。
基本:アウトラインを展開・折りたたみ
Sub Outline_ExpandAll_Rows()
'行のアウトラインを最大まで展開(十分大きいレベル値を指定)
ActiveSheet.Outline.ShowLevels RowLevels:=9
End Sub
Sub Outline_CollapseToLevel1_Rows()
'行のアウトラインをレベル1(最上位)だけ表示=折りたたみ
ActiveSheet.Outline.ShowLevels RowLevels:=1
End Sub
Sub Outline_ExpandAll_Columns()
'列のアウトラインを最大まで展開
ActiveSheet.Outline.ShowLevels ColumnLevels:=9
End Sub
VB- ポイント:
- RowLevels/ColumnLevels: 表示する階層の数を指定。設定済みの最大レベルより大きい数を渡すと「すべて展開」になる。
- レベル1: 最上位のみ表示=折りたたみ状態。
行・列を同時に制御(行は2、列は1など)
Sub Outline_ShowSpecificLevels()
'行はレベル2まで、列はレベル1のみ
ActiveSheet.Outline.ShowLevels RowLevels:=2, ColumnLevels:=1
End Sub
VB- ポイント:
- 行・列は独立して指定できるので、見やすい表示を作りやすい。
範囲ごとに展開・折りたたみ(Excel 4.0 マクロでピンポイント制御)
Sub Outline_ShowDetail_RowBlock()
'特定の行ブロックだけ展開(対象=1:行、位置=開始セルの行番号)
ExecuteExcel4Macro "SHOW.DETAIL(1," & 5 & ",TRUE)" '5行付近のグループを展開
End Sub
Sub Outline_HideDetail_ColumnBlock()
'特定の列ブロックだけ折りたたみ(対象=2:列、位置=開始セルの列番号)
ExecuteExcel4Macro "SHOW.DETAIL(2," & 3 & ",FALSE)" '3列付近のグループを折りたたむ
End Sub
VB- ポイント:
- SHOW.DETAIL(対象, 位置, 動作) の対象は「1=行」「2=列」、動作は「TRUE=展開」「FALSE=折りたたみ」。特定ブロックの制御に使える。
- レベル単位でなく「該当グループ」を直接操作したいときに有効。
前提操作:グループ化の作成と解除の基本
Sub Outline_CreateGroups()
Rows("2:10").Group '行のグループ化
Columns("C:E").Group '列のグループ化
End Sub
Sub Outline_ClearGroups_Safely()
'グループ化の解除(行・列)
Rows("2:10").Ungroup
Columns("C:E").Ungroup
End Sub
VB- ポイント:
- Rows(…).Group / Columns(…).Group で作成し、Ungroup/または ClearOutline で解除。解除は状況によりエラー扱いの違いがあるため、ClearOutlineのほうが無難な場面もある。
例題で練習
例題1:印刷前に全展開、印刷後にレベル1へ折りたたみ
Sub Example_PrintExpanded()
ActiveSheet.Outline.ShowLevels RowLevels:=9, ColumnLevels:=9 '全展開
ActiveSheet.PrintOut
ActiveSheet.Outline.ShowLevels RowLevels:=1, ColumnLevels:=1 '折りたたみ
End Sub
VB例題2:詳細列グループだけ折りたたみ、集計列は常時表示
Sub Example_CollapseDetailKeepTotals()
'列の詳細は折りたたみ(レベル1)、行はレベル2まで表示
ActiveSheet.Outline.ShowLevels RowLevels:=2, ColumnLevels:=1
End Sub
VB例題3:特定ブロックだけ展開(行5付近、列3付近)
Sub Example_ShowSpecificBlocks()
ExecuteExcel4Macro "SHOW.DETAIL(1," & 5 & ",TRUE)" '行グループ展開
ExecuteExcel4Macro "SHOW.DETAIL(2," & 3 & ",TRUE)" '列グループ展開
End Sub
VB実務の落とし穴と対策
- レベルの意味: レベルは「階層数」。最大レベルより大きい値を指定すれば全展開になる。レベル1は最上位のみ表示。
- マクロ記録に出ない操作: アウトラインの展開/折りたたみは一部バージョンでマクロ記録されない。ShowLevels を覚えておくと再現できる。
- フィルタや並べ替えと併用: グループ化の見え方が混乱しやすい。印刷や配布前は ShowLevels で表示状態を明示しておくと安心。
- 解除の方法差: Ungroup は対象がないとエラーになるが、ClearOutline は状況によりエラーにならずに済むケースがある。環境差に注意。
