はじめに
Excelでは、行や列をグループ化することで、データの階層構造を作ることができます。グループ化された行や列は、プラスやマイナスの記号をクリックすることで、表示や非表示を切り替えることができます。これは、データの概要や詳細を見やすくするために便利な機能です。
しかし、シートを保護すると、グループ化された行や列の表示/非表示ができなくなってしまいます。シート保護は、データの誤変更や削除を防ぐために重要な機能ですが、グループ化された行や列を見たいときには不便です。
そこで、このブログでは、シート保護状態でも全てのグループ行・グループ列を表示/非表示する方法を紹介します。
シート保護状態でグループ行・グループ列を表示/非表示するときの問題点
シート保護とは、Excelでデータの誤変更や削除を防ぐために使う機能です。シート保護をすると、パスワードがないとシートの内容を変更できなくなります。シート保護は、データの安全性を高めるために重要な機能ですが、一方で、グループ行・グループ列の表示/非表示ができなくなってしまうという問題点があります。
グループ行・グループ列の表示/非表示は、データの概要や詳細を見やすくするために便利な機能ですが、シート保護状態では、プラスやマイナスの記号がグレーアウトしてクリックできなくなります。また、[データ]タブの[アウトライン]グループの[すべて表示]や[すべて隠す]ボタンも使えなくなります。これは、シート保護時には行や列の書式設定が制限されるためです。
つまり、シート保護状態では、グループ行・グループ列の表示/非表示をするには、まずシート保護を解除しなければなりません。しかし、これは面倒であり、また、データの安全性を低下させる可能性があります。そこで、このブログでは、シート保護状態でも全てのグループ行・グループ列を表示/非表示する方法を紹介します。
方法1:シート保護で「列の書式設定」「行の書式設定」を有効にする
シート保護の許可項目の中で「列の書式設定」「行の書式設定」を許可することでグループ化の表示/非表示を切り替えることができるようになります。
方法2:VBAを使う
「列の書式設定」「行の書式設定」 を許可したくないが、グループ行/列の表示/非表示を切り替えたい場合は、VBAを使って実現します。
処理の順番としては以下のようになります。
- シート保護を解除する
- グループ行・グループ列を表示/非表示にする
- シート保護を設定する
VBAコードのサンプル
Sub Show_Outline()
ActiveSheet.Unprotect Password:="abc"
ActiveSheet.Outline.ShowLevels RowLevels:=2, ColumnLevels:=2
ActiveSheet.Protect Password:="abc"
End Sub
Sub Hide_Outline()
ActiveSheet.Unprotect Password:="abc"
ActiveSheet.Outline.ShowLevels RowLevels:=1, ColumnLevels:=1
ActiveSheet.Protect Password:="abc"
End Sub
VBAコード解説
まずグループ行・列を表示する前にシート保護を解除します。これを実施しないとエラーになってしまいます。
このサンプルコードではパスワードを指定しています。シート保護にはパスワードを設定できますので必要な場合はこの用に記述します。
ActiveSheet.Unprotect Password:="abc"
次にグループ行・列を操作します。どこまで表示するかはレベルパラメータを与えて制御することができます。
レベル1は全てのグループ行・列を表示しません。そのため上記サンプルではHide_Outline
プロシージャとしています。
ActiveSheet.Outline.ShowLevels RowLevels:=1, ColumnLevels:=1
レベル2以降は設定したエリアを表示していきます。そのため上記サンプルではShow_Outline
プロシージャとしています。
ActiveSheet.Outline.ShowLevels RowLevels:=2, ColumnLevels:=2
グループ行・列の操作が完了したら、最後にシートを保護状態に戻します。
ActiveSheet.Protect Password:="abc"
実行方法
リボンの開発タブからマクロを選択します。
Hide_Outlineを実行すると、グループ行・列を非表示(レベル=1)にします。
Show_Outlineを実行すると、グループ行・列を表示(レベル=2までを表示)します。このプロシージャはアウトラインレベル=2に設定するので、レベル3以下のグループを設定している場合は表示されません。