グループ化の表示方法は階層単位とグループ単位の2通り
行や列のグループ化を行ったあとに、表示(展開)と非表示(折りたたみ)のマクロで行いたい場合があります。その際に階層レベルで行うか、必要なグループ部分のみ行うかが異なります。
階層レベルとは数字ボタンを押した際に表示・非表示される単位のことを指し、グループ単位とは連続するセル部分の+ボタンと-ボタンを指します。
階層単位とグループ単位ではマクロが異なります。階層レベルであればShowLevelsメソッドを使う単純なマクロで実現できますが、個別のグループ単位の場合は工夫が必要になります。
ワークシート左上にある階層単位の数字の1や2などのボタン操作であれば、マクロの記録機能で保存することができます。ところがグループ単位の操作では+ボタンもしくは-ボタン操作は、マクロの記録機能で保存しようと思っても残念ながら保存されません。
このように、階層単位の数字ボタンでは保存できるのに、グループ単位の+ボタンと-ボタンでは保存できない違いがあります。この理由は後述します。
なお、このページではグループ化の表示と非表示を行うマクロについて書いているため、設定と解除については別ページ「グループ化の設定と解除」をご参照ください。
表示と非表示は階層単位でしか出来ない
階層単位(数字ボタン)でのグループ化の表示と非表示のコードは全く同じものになります。これはShowLevelsメソッドの動作によるものです。
どういうことかというと、表示するかしないか、という処理を行うのではなく、数字ボタンの何階層目を表示させるか、ということを指定することになるためです。
以下のShowLevelsメソッドは階層の番号ボタンを押したときと同じことを実現します。
階層単位の1ボタンを押した場合
以下のコードは階層単位の1ボタンを押したときと同じ内容です。
1ボタンを押したときはグループ化をしていない行だけを表示するため、グループ化している行は全て非表示の状態になります。
1 2 3 |
Sub ShowLevel1Test() ActiveSheet.Outline.ShowLevels RowLevels:=1 End Sub |
階層単位の2ボタンを押した場合
以下のコードも先のと同様、2ボタンを押したときと同じ内容になります。
1 2 3 |
Sub ShowLevel2Test() ActiveSheet.Outline.ShowLevels RowLevels:=2 End Sub |
RowLevelsを指定した場合は行階層の処理を行います。
なお、列階層の処理を行う場合はColumnLevelsプロパティを使います。使い方はRowLevelsと同じです。
個別のグループ化の表示と非表示を行う方法
先の通り、グループ化の表示と非表示のために用意されているメソッドはShowLevelsのみです。個別のグループ化の+ボタンと-ボタンのためのメソッドは用意されていないため、マクロの記録機能では何も保存されません。
では、個別のグループ化している+ボタンや-ボタンを押したときの処理を行いたいときはどうすればよいかというと、ちょっと工夫が必要です。工夫というのは、GroupメソッドとShowLevelsメソッドの特性を利用します。
Groupメソッドはグループ化を行うメソッドですが、実行した際は表示状態になります。-ボタンが表示されている状態です。
ShowLevelsメソッドは現時点のグループ化の個所にのみ処理が行われます。そのため、ShowLevelsメソッドを実行したあとに作成されたグループ化の部分には関知しません。
これらの特性を利用して、グループ化を行う順番とShowLevelsメソッドを行うタイミングにより、表示したいグループ化の部分と非表示にしたいグループ化の部分を分けることが出来ます。
以下が個別のグループ化の表示対応用のソースコードです。
個別グループ化用ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Sub UnitGroupShowTest() '// 行のグループ化を全て削除 ActiveSheet.rows.ClearOutline '// 非表示状態にしたい個所をグループ化 Range("A2:A8").rows.Group Range("A15:A19").rows.Group '// 現時点でグループ化されている個所を非表示にする ActiveSheet.Outline.ShowLevels rowlevels:=1 '// 表示状態にしたいグループ化の個所をグループ化 Range("A11:A13").rows.Group End Sub |
実行後はこのようになります。
ソースコードの説明
3行目で行のグループ化をいったん解除します。これは表示と非表示のグループ化の切り分けが個別に出来ないため、一度全て無しにしています。
次に、6行目と7行目で非表示にしたい個所のグループ化を行い、10行目でその部分を非表示にします。ここでのShowLevelsメソッドは6行目と7行目で作成したグループ化の部分に対してのみ処理が行われます。
最後に、表示状態にしたいグループ化部分を作成します。ここでのソースコードはグループ化を1つ作った状態ですので単純ですが、階層が複数の場合はShowLevelsメソッドを複数回呼び出す場合もあるでしょうから、その場合は処理が複雑になります。