シートを VeryHidden にする
Excel VBA で「シートを非表示」にする方法には Hidden と VeryHidden の2種類があります。
- Hidden → ユーザーが「再表示」メニューから戻せる
- VeryHidden → ユーザーはメニューから再表示できず、VBAやVBEでしか戻せない
初心者がつまずきやすい「設定方法」「解除方法」「一括処理」を、コード例とテンプレートで丁寧に解説します。
基本:1枚のシートを VeryHidden にする
Sub MakeSheetVeryHidden_Basic()
ThisWorkbook.Worksheets("機密").Visible = xlSheetVeryHidden
End Sub
VB- ポイント:
VisibleプロパティにxlSheetVeryHiddenを設定すると完全非表示になります。- 「再表示」メニューには出てこないため、ユーザーが簡単に戻せません。
再表示(解除)する方法
Sub UnhideVeryHiddenSheet()
ThisWorkbook.Worksheets("機密").Visible = xlSheetVisible
End Sub
VB- ポイント:
xlSheetVisibleに戻すと再表示されます。- VeryHidden は「VBAでしか解除できない」ので、解除コードを用意しておくと安心です。
安全テンプレート:存在チェック+切替
Function TryGetSheet(sheetName As String, Optional wb As Workbook) As Worksheet
If wb Is Nothing Then Set wb = ThisWorkbook
On Error Resume Next
Set TryGetSheet = wb.Worksheets(sheetName)
On Error GoTo 0
End Function
Sub SetSheetVisibility(sheetName As String, mode As XlSheetVisibility, Optional wb As Workbook)
Dim ws As Worksheet
If wb Is Nothing Then Set wb = ThisWorkbook
Set ws = TryGetSheet(sheetName, wb)
If ws Is Nothing Then
MsgBox "シート '" & sheetName & "' が見つかりません。"
Exit Sub
End If
ws.Visible = mode
End Sub
Sub Example_VeryHidden()
SetSheetVisibility "機密", xlSheetVeryHidden
End Sub
Sub Example_Unhide()
SetSheetVisibility "機密", xlSheetVisible
End Sub
VB- ポイント:
- 存在しないシートを指定するとエラーになるので、
TryGetSheetで安全にチェック。 modeにxlSheetHidden/xlSheetVeryHidden/xlSheetVisibleを渡せば切替可能。
- 存在しないシートを指定するとエラーになるので、
一括で VeryHidden にする
Sub HideSheets_VeryHidden()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "トップ" Then '残したいシートを除外
ws.Visible = xlSheetVeryHidden
End If
Next
End Sub
VB- ポイント:
- 「トップ」や「目次」だけ残して、他を一括で完全非表示にできます。
- 最低1枚は表示状態で残す必要があります(全シート非表示は不可)。
部分一致で VeryHidden にする(例:「tmp」を含むシート)
Sub HideSheetsByPartial_VeryHidden()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If InStr(1, ws.Name, "tmp", vbTextCompare) > 0 Then
ws.Visible = xlSheetVeryHidden
End If
Next
End Sub
VB- ポイント:
- 名前に「tmp」や「一時」を含むシートを自動で完全非表示に。
- 命名規則を活用すると効率的です。
例題で練習
例題1:設定シートを完全非表示にする
Sub Example_HideSettings()
SetSheetVisibility "設定", xlSheetVeryHidden
MsgBox "設定シートを完全非表示にしました。"
End Sub
VB例題2:VeryHidden のシートを一括で再表示
Sub Example_UnhideAllVeryHidden()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If ws.Visible = xlSheetVeryHidden Then
ws.Visible = xlSheetVisible
End If
Next
MsgBox "VeryHidden のシートをすべて再表示しました。"
End Sub
VB実務の落とし穴と対策
- 全シート非表示は不可: Excelは最低1枚は表示状態で残す必要があります。
- 解除方法を忘れる: VeryHiddenはユーザーが戻せないので、解除用マクロを必ず用意。
- ActiveSheet操作の失敗: 非表示にしたシートを
Selectするとエラー。処理はオブジェクト参照で行う。 - WorksheetsとSheetsの違い: グラフシートを含めないなら
Worksheetsを使うと混乱が減ります。
次の一歩(小課題)
- 課題1: 「Control」シートに一覧(A列)を作り、その名前のシートをすべて VeryHidden にする。
- 課題2: 「tmp」「draft」を含むシートを自動で完全非表示にし、ログシートに処理結果を書き出す。
- 課題3: VeryHidden にしたシートをパスワード入力後に再表示する簡易セキュリティマクロを作る。
