Excel VBA 逆引き集 | アウトラインの展開

Excel VBA
スポンサーリンク

アウトラインの展開

折りたたんだ行・列(グループ化されたアウトライン)を「一気に展開」したり、「指定レベルまで展開」するための定番コードを整理します。基本は 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 は状況によりエラーにならずに済むケースがある。環境差に注意。
タイトルとURLをコピーしました