📋
HideSheet
シート管理指定したシートを非表示にする
ワークシートをVBAで非表示にするマクロです。Worksheet.VisibleプロパティをxlSheetHiddenまたはxlSheetVeryHiddenに設定することでシートを隠せます。VeryHiddenにするとVBAからしか再表示できないため、計算用シートや設定シートを一般ユーザーから保護するのに有効です。条件に応じて自動的にシートの表示・非表示を切り替えるダッシュボード制御にも活用できます。内部ではVisibleプロパティにxlSheetHiddenまたはxlSheetVeryHiddenを設定するだけの処理ですが、後者を選ぶとExcelの標準UIからは再表示できなくなるため、UnhideAllSheetsのようなVBA経由の解除手段を必ず用意しておく必要があります。ProtectSheetと組み合わせれば、隠した上でさらに保護をかける二重の防御も実現できます。

📖 使い方
- VBAエディタを開く(Alt + F11)
- モジュールを挿入(挿入 > モジュール)
- 下記VBAコードをコピー&ペースト
- ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: 実行すると非表示にするシート名を入力するダイアログが表示される
🎯 活用シーン
- ✓計算ロジックや数式を含む補助シートをエンドユーザーから隠す
- ✓管理者用設定シートをVeryHiddenで保護する
- ✓印刷やPDF出力前に不要なシートを一時的に非表示にする
- ✓エンドユーザーに操作させたくない設定用マスターシートを隠し、誤操作を防ぎたいとき
- ✓配布前のテンプレートから開発中の検証用シートを完全に隠して見えなくしたいとき
💡 実装のヒント
- ▸xlSheetVeryHiddenはUIから再表示できないため機密シートに最適です
- ▸Visible = xlSheetHiddenは右クリックメニューから再表示可能です
- ▸IsHiddenの代わりにVisible <> xlSheetVisibleで非表示チェックができます
- ▸VeryHiddenのシートを誤って忘れると開発者自身も存在を見失うことがあるため、ListAllSheetsで定期的に棚卸しすることをお勧めします。
- ▸複数シートをまとめて非表示にしたい場合は、シート名の配列を用意してループで処理すると効率的です。
💻 VBAコード
' HideSheet
' -----------------
' Macro Name: HideSheet
' Description: 指定したシートを非表示にする
' Parameters: なし
' Returns: なし
' Usage: 実行すると非表示にするシート名を入力するダイアログが表示される
' -----------------
Sub HideSheet()
Dim ws As Worksheet
Dim sheetName As String
Dim visibleCount As Long
Dim i As Long
On Error GoTo ErrorHandler
visibleCount = 0
For i = 1 To Worksheets.Count
If Worksheets(i).Visible = True Then
visibleCount = visibleCount + 1
End If
Next i
If visibleCount <= 1 Then
MsgBox "最後の表示中のシートは非表示にできません。", vbExclamation
Exit Sub
End If
sheetName = InputBox("非表示にするシート名を入力:", "シート非表示", ActiveSheet.Name)
If sheetName = "" Then
Exit Sub
End If
On Error Resume Next
Set ws = Worksheets(sheetName)
On Error GoTo ErrorHandler
If ws Is Nothing Then
MsgBox "「" & sheetName & "」は存在しません。", vbExclamation
Exit Sub
End If
If ws.Visible = xlSheetVisible Then
visibleCount = 0
For i = 1 To Worksheets.Count
If Worksheets(i).Visible = True And i <> ws.Index Then
visibleCount = visibleCount + 1
End If
Next i
If visibleCount = 0 Then
MsgBox "このシートを非表示にすると表示中のシートがなくなります。", vbExclamation
Exit Sub
End If
ws.Visible = xlSheetHidden
MsgBox "「" & sheetName & "」を非表示にしました。", vbInformation
Else
MsgBox "「" & sheetName & "」は既に非表示です。", vbInformation
End If
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました: " & Err.Description, vbCritical
End Sub