Excelシート保護状態で全てのグループ行・グループ列を表示/非表示する方法

はじめに

Excelでは、行や列をグループ化することで、データの階層構造を作ることができます。グループ化された行や列は、プラスやマイナスの記号をクリックすることで、表示や非表示を切り替えることができます。これは、データの概要や詳細を見やすくするために便利な機能です。

しかし、シートを保護すると、グループ化された行や列の表示/非表示ができなくなってしまいます。シート保護は、データの誤変更や削除を防ぐために重要な機能ですが、グループ化された行や列を見たいときには不便です。

そこで、このブログでは、シート保護状態でも全てのグループ行・グループ列を表示/非表示する方法を紹介します。

シート保護状態でグループ行・グループ列を表示/非表示するときの問題点

シート保護とは、Excelでデータの誤変更や削除を防ぐために使う機能です。シート保護をすると、パスワードがないとシートの内容を変更できなくなります。シート保護は、データの安全性を高めるために重要な機能ですが、一方で、グループ行・グループ列の表示/非表示ができなくなってしまうという問題点があります。

グループ行・グループ列の表示/非表示は、データの概要や詳細を見やすくするために便利な機能ですが、シート保護状態では、プラスやマイナスの記号がグレーアウトしてクリックできなくなります。また、[データ]タブの[アウトライン]グループの[すべて表示]や[すべて隠す]ボタンも使えなくなります。これは、シート保護時には行や列の書式設定が制限されるためです。

つまり、シート保護状態では、グループ行・グループ列の表示/非表示をするには、まずシート保護を解除しなければなりません。しかし、これは面倒であり、また、データの安全性を低下させる可能性があります。そこで、このブログでは、シート保護状態でも全てのグループ行・グループ列を表示/非表示する方法を紹介します。

方法1:シート保護で「列の書式設定」「行の書式設定」を有効にする

シート保護の許可項目の中で「列の書式設定」「行の書式設定」を許可することでグループ化の表示/非表示を切り替えることができるようになります。

方法2:VBAを使う

「列の書式設定」「行の書式設定」 を許可したくないが、グループ行/列の表示/非表示を切り替えたい場合は、VBAを使って実現します。

処理の順番としては以下のようになります。

  1. シート保護を解除する
  2. グループ行・グループ列を表示/非表示にする
  3. シート保護を設定する

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以下のグループを設定している場合は表示されません。

コメントする