範囲をグループ化する - Excel VBA プログラミング

PROGRAM


範囲をグループ化する

Excel では、"アウトライン" の "グループ化" という機能を使って、セルを折りたためるようにすることができます。

例えば、次のようなワークシートがあったとします。

このとき、たとえば B 列から D 列までをグループ化することで、それを折りたたんで、表示/非表示を簡単に切り替えることができるようになります。

 

このグループ化の設定は、Excel VBA からでも、次のようにして実行することができます。

Call Columns("B:D").Group

このようにすることで、 B 列から D 列までがグループ化されます。

 

同様に、グループ化を解除するには "Group" メソッドの代わりに "Ungroup" メソッドを呼び出します。

ただしこのとき、グループ化されていない範囲に対してグループ解除を行おうとするとエラーになるので、無条件にグループを解除したいような場合には、次のようにエラーを無視して実行させても良いと思います。

On Error Resume Next

 

Call Columns("B:D").Ungroup

 

On Error Goto 0

ただ、上記のようなエラー発生の可能性があるのと、階層でグループ化されている場合にはそのうちの 1 つしかグループが解除されないので、完全にグループを解除したい場合には セルや範囲の値を消去する で紹介した ClearOutline メソッドを使うのが、いちばん簡単かもしれません。

 

グループされた範囲をマクロで展開する

グループ化された範囲を Excel VBA を使って、開いたり閉じたりすることもできます。

そのためには ExecuteExcel4Macro 関数を使って "SHOW.DETAIL(対象, 位置, 扱い)" という感じの命令を発行します。

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

 

これらを踏まえて、上記でグループ化した列に対するグループを展開したい場合には、次のように命令します。

Call ExecuteExcel4Macro("SHOW.DETAIL(2,2,True)")

最初の "2" が列に対するグループの操作を意味し、次の "2" が 2 列目が所属するグループを意味し、最後の "True" でそのグループを展開します。

グループの展開か折りたたみかを省略すれば、現在の状態に合わせて、折りたたまれたり展開されたりします。

 


[ もどる ]