マクロ処理専用の作業用シートや、参照用のマスターシートを、ユーザーの目に触れないように隠したいことがあります。Excelには「右クリック→再表示」で見えてしまう通常の非表示のほかに、通常の操作では再表示できない「完全な非表示」機能もあります。
この記事では、Worksheet.Visibleプロパティの基本的な使い方から、xlSheetVeryHiddenを使ってマクロからしか再表示できない隠しシートを作る方法まで解説します。
Visibleプロパティの3つの状態
Worksheet.Visibleプロパティには3つの設定値があります。
| 設定値 | 状態 | ユーザーの操作での再表示 |
|---|---|---|
| xlSheetVisible(-1) | 表示 | – |
| xlSheetHidden(0) | 非表示 | 右クリック→「再表示」で可能 |
| xlSheetVeryHidden(2) | 完全な非表示 | 不可(VBAからのみ再表示可能) |
Falseを代入するとxlSheetHiddenと同じ扱いになりますが、意図を明確にするためにも定数名で指定するのがおすすめです。
基本の書き方:シートを非表示にする
Sub HideSheet()
Worksheets("作業用").Visible = xlSheetHidden
MsgBox "「作業用」シートを非表示にしました。"
End Sub
このコードを実行すると、「作業用」シートはシートタブから消えます。ただし、ユーザーがシートタブを右クリックして「再表示」を選べば、誰でも元に戻せてしまいます。
xlSheetVeryHiddenで完全に隠す
パスワードやマスターデータなど、ユーザーに絶対に見せたくないシートにはxlSheetVeryHiddenを使います。
Sub HideSheetCompletely()
Worksheets("マスターデータ").Visible = xlSheetVeryHidden
MsgBox "「マスターデータ」シートを完全に非表示にしました。"
End Sub
xlSheetVeryHiddenに設定すると、Excelの標準メニューの「再表示」ダイアログにもシート名が表示されなくなります。再表示するには、VBE(VBAエディタ)のプロパティウィンドウからVisibleを変更するか、以下のようにマクロで戻す必要があります。
Sub ShowHiddenSheet()
Worksheets("マスターデータ").Visible = xlSheetVisible
End Sub
起動時に隠して終了時に再表示する
ブックを開いたときはマスターシートを隠し、マクロで参照するときだけ一時的に表示させたい場合は、Workbook_Openイベントと組み合わせます。
' ThisWorkbookモジュールに記述
Private Sub Workbook_Open()
Worksheets("マスターデータ").Visible = xlSheetVeryHidden
End Sub
' 標準モジュールに記述
Sub UseMasterDataTemporarily()
Dim ws As Worksheet
Set ws = Worksheets("マスターデータ")
ws.Visible = xlSheetVisible
' ここでマスターデータを参照した処理を行う
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
MsgBox "マスターデータは " & lastRow & " 行あります。"
ws.Visible = xlSheetVeryHidden
End Sub
処理の前後で表示・非表示を切り替えることで、通常はユーザーの目に触れず、マクロが必要なときだけ内部的にシートへアクセスできる仕組みが作れます。
全シートを一括で表示・非表示にする
複数の作業用シートをまとめて操作したい場合は、For Eachでループ処理します。
Sub HideAllWorkSheetsExceptMain()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "メイン" Then
ws.Visible = xlSheetVeryHidden
End If
Next ws
MsgBox "「メイン」シート以外をすべて非表示にしました。"
End Sub
「メイン」シート以外の全シートを完全非表示にするコードです。ブックを配布する前に、内部処理用のシートを一括で隠したい場合に活用できます。
注意点:シートを1枚も表示状態にしないとエラーになる
Excelの仕様上、ブック内のすべてのシートを非表示(xlSheetHiddenまたはxlSheetVeryHidden)にすることはできません。最低1枚はxlSheetVisibleのシートが残っている必要があり、これに違反するとエラーになります。
Sub SafeHideAll()
Dim ws As Worksheet
Dim visibleCount As Long
' 表示中のシート数を数える
For Each ws In ThisWorkbook.Worksheets
If ws.Visible = xlSheetVisible Then visibleCount = visibleCount + 1
Next ws
If visibleCount <= 1 Then
MsgBox "表示中のシートが1枚しかないため、これ以上非表示にできません。"
Exit Sub
End If
' 「メイン」以外を非表示にする処理など
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "メイン" And ws.Visible = xlSheetVisible Then
ws.Visible = xlSheetVeryHidden
End If
Next ws
End Sub
事前に表示中のシート数をチェックしてから処理することで、実行時エラーを防げます。
まとめ
Worksheet.Visibleプロパティを使えば、シートの表示・非表示をVBAから自由にコントロールできます。xlSheetHiddenはユーザーの操作で再表示できる軽い非表示、xlSheetVeryHiddenはVBAからしか再表示できない完全な非表示です。
マスターデータや内部処理用のシートを隠したい場合はxlSheetVeryHiddenを使い、Workbook_Openイベントと組み合わせることで、ユーザーに見せたくない情報を安全に扱えるマクロを作成できます。


コメント