非表示シートは再表示を禁止するにはVBAで対応するしかない
Excelでシートタブを右クリックして「非表示」を選択するとそのシートを非表示にすることができます。ただし、その場合は再表示が可能です。
ところが、場合によっては非表示シートの再表示をしてほしくない場合があります。
このような場合、Excelブック上では対応することが出来ません。VBA画面での設定にて対応することになります。
手動で再表示禁止にする方法
非表示シートの再表示を禁止するには以下の手順を行います。
- VBA画面を開きます。(Alt + F11)
- プロジェクトウィンドウから対象ブックの再表示を禁止したいシートを選択します。
- プロパティウィンドウの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”)と書いても同じ意味になります。
1 2 3 4 |
Sub Auto_Open() Sheet2.Visible = xlSheetVeryHidden ' Sheets("Sheet2").Visible = xlSheetVeryHidden End Sub |
なお、他のブックから開く場合は、Workbook.Openメソッドを使っただけではAuto_Open関数が処理されませんので、Workbook.OpenメソッドのあとにWorkbook.RunAutoMacrosメソッドを使います。
1 2 3 4 |
Sub OpenBookTest() Workbooks.Open "C:\Book2.xlsm" ActiveWorkbook.RunAutoMacros xlAutoOpen End Sub |
もしくは、呼び出し元はWorkbook.Openメソッドを使い、標準モジュールではなくThisWorkBookにWorkbook_Open関数を書きます。Auto_Open関数と異なりWorkbook.Openメソッドから呼び出されると動作します。
1 2 3 4 |
Sub Workbook_Open() Sheet2.Visible = xlSheetVeryHidden ' Sheets("Sheet2").Visible = xlSheetVeryHidden End Sub |
3. VBAにパスワードを設定
ツールメニュー→VBAProjectのプロパティ→保護タブ を選択して、パスワードを設定します。パスワードを設定するとVBAの画面でシートや標準モジュールを見ようとした際にパスワードが要求されるようになります。
4. ブックの保存
あとはマクロブックを保存して終わりです。
それでも欠点はある
ただしこの方法にも欠点はあります。それは、Excelの設定でマクロが無効化されている場合など個別のPC環境ごとに正しく動作しないことが考えられます。