非表示シートは再表示を禁止するにはVBAで対応するしかない

Excelでシートタブを右クリックして「非表示」を選択するとそのシートを非表示にすることができます。ただし、その場合は再表示が可能です。

ところが、場合によっては非表示シートの再表示をしてほしくない場合があります。

このような場合、Excelブック上では対応することが出来ません。VBA画面での設定にて対応することになります。


手動で再表示禁止にする方法

非表示シートの再表示を禁止するには以下の手順を行います。

  1. VBA画面を開きます。(Alt + F11)
  2. プロジェクトウィンドウから対象ブックの再表示を禁止したいシートを選択します。
  3. プロパティウィンドウのVisibleでxlSheetVeryHiddenを選択します。

これで非表示状態となった上でExcelブック上での再表示もできなくなります。シートを右クリックしても「再表示」ダイアログには候補として表示されません。

ただし、このままではVBAの知識がある人が見た場合にxlSheetVeryHidden(VBAでの非表示状態)からxlSheetVisible(表示状態)に変更されて非表示シートを見られてしまう恐れがあります。

どうしても非表示シートを見られたくない場合は以下の対応を行います。


マクロブック(xlsmファイル)で非表示シートを作成しVBAのパスワードを設定する

1. xlsmブックの作成

まず、対象のブックをxlsxファイルではなく、Excelマクロ有効ブック(xlsmファイル)として保存します。名前を付けて保存の際にファイルの種類欄から「Excelマクロ有効ブック(*.xlsm)」を選ぶことで保存できます。

その際に既に作成済みだったxlsxファイルがある場合、xlsxファイルは削除して構いません。

2. シート非表示のコードを作成

その後、VBA画面で標準モジュールを追加し、以下のコードを書きます。

Auto_Open関数はブックが開いたときに動作する特殊な関数です。ブックが開いた際に対象シートをxlSheetVeryHiddenにするコードを書くことで常に非表示にするようにします。

2行目には非表示にしたいシートを指定します。ここではSheet2としています。3行目のようにSheets(“Sheet2”)と書いても同じ意味になります。

 

なお、他のブックから開く場合は、Workbook.Openメソッドを使っただけではAuto_Open関数が処理されませんので、Workbook.OpenメソッドのあとにWorkbook.RunAutoMacrosメソッドを使います。

 

もしくは、呼び出し元はWorkbook.Openメソッドを使い、標準モジュールではなくThisWorkBookにWorkbook_Open関数を書きます。Auto_Open関数と異なりWorkbook.Openメソッドから呼び出されると動作します。

3. VBAにパスワードを設定

ツールメニュー→VBAProjectのプロパティ→保護タブ を選択して、パスワードを設定します。パスワードを設定するとVBAの画面でシートや標準モジュールを見ようとした際にパスワードが要求されるようになります。

4. ブックの保存

あとはマクロブックを保存して終わりです。

それでも欠点はある

ただしこの方法にも欠点はあります。それは、Excelの設定でマクロが無効化されている場合など個別のPC環境ごとに正しく動作しないことが考えられます。