ExcelVBAを使ってOutlineを作成し、展開・折りたたみを行う

EXCELの表にアウトラインを設け、一部を展開したり、折りたたんで非表示にする場合があります。今回はVBAを使ったアウトラインの作成方法と一部分を展開したり折りたたんだりする方法についてサンプルアプリでご説明します。

サンプルアプリの使い方

・「アウトライン作成」ボタンをクリックすると以下のようにアウトラインが作成されます

・「アウトライン右側を折りたたむ」ボタンをクリックすると右側のアウトラインが折りたたまれます。

・「アウトライン左側を折りたたむ」ボタンをクリックすると左側のアウトラインが折りたたまれます。

・「アウトライン削除」ボタンをクリックするとアウトラインが削除されます。

サンプルコードの解説

グループ化するには行や列に対してGroupメソッドを使います。
以下のコードは、D列~F列とI列~J列をグループ化しています。
 Call Columns(“D:F").Group
 Call Columns(“I:J").Group

特定の箇所を展開したり折りたたんだりするには、Excel4.0のマクロを利用すると簡単にできます。
 D列~F列を展開するコード
  Call ExecuteExcel4Macro(“SHOW.DETAIL(2,4,True)")
 I列~J列を折りたたむコード
  Call ExecuteExcel4Macro(“SHOW.DETAIL(2,9,False)")
開いたり閉じたりするには、 “SHOW.DETAIL(対象, 位置, 動作)"の変数で指定します。
SHOW.DETAILの変数の使い方は以下の通りです。

対象 1 なら、行に対するグループを操作します。
 2 なら、列に対するグループを操作します。
位置 対象の行または列のセルの位置を指定します。
 目的のアウトライングループに所属するセルならどれでも構いません。
動作 True なら、グループを展開します。
 False なら、グループを折りたたみます。
 省略すると、展開されていれば折りたたみ、折りたたまれていれば展開します。

ExecuteExcel4MacroはVBAが使える前にあったものですが、最新バージョンのエクセルでも使用できます。ただし、マイクロソフトはVBAへの移行を勧めていますので注意が必要です。

グループ化を削除するには行や列に対してClearOutlineメソッドを使います。
以下のコードは、D列~F列、I列~J列のアウトラインを削除します。
 Columns(“D:F").ClearOutline
 Columns(“I:J").ClearOutline

サンプルアプリのコード   アプリの作成手順はこちら

サンプルアプリの各ボタンのコードは以下の通りです。

Option Explicit

Sub アウトライン作成()

 '「Sheet1」シートを選択
 Worksheets("Sheet1").Select
  
 'アウトラインを一旦削除する
 ActiveSheet.Columns.ClearOutline
 
 'D列~F列、I列~J列をグループ化する
 Call Columns("D:F").Group
 Call Columns("I:J").Group
 
 'セルA1を選択して終了
 Cells(1, 1).Select

End Sub

'------------------------------------------------------

Sub アウトライン右側折り畳み()

 '「Sheet1」シートを選択
 Worksheets("Sheet1").Select
 
 'D列~F列を展開する
 Call ExecuteExcel4Macro("SHOW.DETAIL(2,4,True)")
 
 'I列~J列を折りたたむ
 Call ExecuteExcel4Macro("SHOW.DETAIL(2,9,False)")
 
End Sub

'------------------------------------------------------

Sub アウトライン左側折り畳み()

 '「Sheet1」シートを選択
 Worksheets("Sheet1").Select
 
 'D列~F列を折りたたむ
 Call ExecuteExcel4Macro("SHOW.DETAIL(2,4,False)")
 
 'I列~J列を展開する
 Call ExecuteExcel4Macro("SHOW.DETAIL(2,9,True)")

End Sub

'------------------------------------------------------

Sub アウトライン削除()

 '「Sheet1」シートを選択
 Worksheets("Sheet1").Select
 
 'D列~F列、I列~J列のアウトラインを削除
 Columns("D:F").ClearOutline
 Columns("I:J").ClearOutline

End Sub