グループ化とは
Excelでの「グループ化」という言葉には以下のように複数の使われ方があります。
- 行や列を表示(展開)と非表示(折りたたみ)が出来るようにすること
- 複数のオートシェイプを1つにまとめること
- 複数のシートを同時選択すること
ここで紹介するのは1つめの「グループ化」です。
たまにこの機能自体知らない方がいます。私自身は行や列の表示と非表示を切り替える目的で使うことが多いです。
なお、このページではグループ化の設定と解除について書いていますが、グループ化設定後の表示(展開)と非表示(折りたたみ)を行うマクロについては別ページの「グループ化の表示と非表示」に書いています。
Excelで操作する場合のグループ化の設定
リボンでのグループ化
このグループ化ですが、VBAでなく通常のExcel操作であればリボンのデータタブ→アウトラインで、グループ化、グループ解除で設定できます。
アウトライン記号(非表示と表示を切り替える+-マーク)の位置の設定
アウトライン記号(非表示と表示を切り替える+-マーク)の位置を上下または左右のどちらかをExcelで操作したい場合は、アウトラインの設定マーク(下の絵の右下の赤丸)を押して、「設定」ダイアログで設定します。
以下の設定ダイアログの赤枠は後述のソースと同様に、アウトライン記号が上側、左側、につく設定です。
通常はチェックがついています。
手でチェックをはずしてもいいんですけど、私は面倒なので後述のVBAでやってます。
また、アウトライン記号の非表示と表示の切り替えはショートカット Ctrl + 8 で出来ます。
グループ化の設定
以下がグループ化のコードです。
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub グループ化() Selection.rows.Group With ActiveSheet.Outline .AutomaticStyles = False '// .SummaryRow = xlBelow '// 行のグループ化マークの+/-を下側に付ける(標準設定) '// .SummaryColumn = xlRight '// 列のグループ化マークの+/-を右側に付ける(標準設定) .SummaryRow = xlAbove '// 行のグループ化マークの+/-を上側に付ける .SummaryColumn = xlLeft '// 列のグループ化マークの+/-を左側に付ける End With End Sub |
このマクロは行を選択しなくても、選択セル範囲の行をグループ化します。グループ化の解除は選択しているセルの行のグループ化を解除します。なお、列をグループ化したい場合は列全体を選択する必要があります。
5行目のAutomaticStylesプロパティはFalseを設定しています。理由は余計なアウトライン設定をされる方がわずらわしいためです。アウトライン記号には行と列それぞれに2種類の設定があります。これは、グループ化が設定されている行または列のグループ化を示すアウトライン記号(+と-とグループ化の個所を示す部分)をどこに配置するかの設定です。
6行目と7行目はアウトライン記号が行の下側、列の右側に付きます。こちらが標準設定です。
9行目と10行目はアウトライン記号が行の上側、列の左側に付きます。こちらは標準設定ではありませんが私はこちらの方が直観的に分かりやすいです。
グループ化の解除
そして、以下がグループ化の解除を行うコードです。
グループ化されていない部分を解除しようとするとエラーが発生するため、何もしなければエラーダイアログが出てわずらわしいためエラーの場合は何もしないようにしています。
1 2 3 4 5 |
Sub グループ化解除() On Error GoTo ERR Selection.rows.Ungroup ERR: End Sub |
階層化されたグループ化の全解除
グループ化は以下のように階層化が出来ます。
これを解除するには上のマクロ(グループ化解除())を必要な回数実行すればよいのですが、一度の実行で解除したい場合は以下のようなコードを書きます。
1 2 3 |
Sub グループ化階層全解除() Selection.Rows.ClearOutline End Sub |
ClearOutlineメソッドはUngroupメソッドと異なり、解除対象がなくてもエラーになりません。
シートのグループ化の解除
シートのグループ化をすべて解除するには以下のように書きます。
1 2 3 |
Sub シートグループ化解除() ActiveSheet.Cells.ClearOutline End Sub |
ブックの全シートのグループ化を解除する場合は上のシート解除を各シートで実行するため、以下のようにになります。
1 2 3 4 5 6 7 |
Sub 全シートグループ化解除() Dim sht As Worksheet For Each sht In Sheets sht.Cells.ClearOutline Next End Sub |
リボンとVBAでのグループ化の違い
リボンが無いときはグループ化を行うことが非常に面倒でした。メニューを何階層も辿っていく必要があり、そのこともあって機能を知らない方もいました。
リボンが出来てからは設定のわずらわしさがかなり解消されたため、マクロを使うほどでも無くなってはいますが、エラーメッセージのわずらわしさは解消されていませんので、動作が分かっている場合はマクロでのグループ化が効率が良いと思われます。
私もメッセージが邪魔なためマクロでのグループ化を行っています。