シートを非表示にする
「非表示」「完全非表示(VeryHidden)」「一括切り替え」「除外して非表示」まで、定番パターンを初心者向けにやさしく解説します。非表示の仕組みは、Worksheet(またはSheets)オブジェクトのVisibleプロパティで制御します。設定値は True/False のほか、定数 xlSheetHidden と xlSheetVeryHidden を使えます。
基本:1枚だけ非表示にする
Sub HideSheet_Basic()
ThisWorkbook.Worksheets("設定").Visible = xlSheetHidden '通常の非表示
End Sub
VB- ポイント:
- 通常非表示: メニューの「再表示」で戻せる非表示が xlSheetHidden。True/False でも切り替え可能です。
- 参照は可能: 非表示でもVBAからのセル参照や処理は可能です。
完全非表示(VeryHidden)にする
Sub HideSheet_VeryHidden()
ThisWorkbook.Worksheets("機密").Visible = xlSheetVeryHidden
End Sub
VB- ポイント:
- VeryHidden: Excelの画面操作(右クリックやメニュー)から再表示できない「完全非表示」。VBEやVBAでVisibleを書き換えるまで戻せません。
- 用途: 設定シートや機密用のシートを隠すときに有効です。
再表示とトグル(切り替え)
Sub UnhideSheet_Basic()
ThisWorkbook.Worksheets("設定").Visible = xlSheetVisible
End Sub
Sub ToggleVisibility_FirstSheet()
With ThisWorkbook.Sheets(1)
.Visible = Not .Visible 'True/Falseを反転
End With
End Sub
VB- ポイント:
- 再表示: Visible = xlSheetVisible で表示に戻します。
- トグル: True/False を反転すると表示・非表示の切替が一行でできます。
安全テンプレート:存在チェック+エラー回避
Function TryGetSheet(name As String, Optional wb As Workbook) As Worksheet
If wb Is Nothing Then Set wb = ThisWorkbook
On Error Resume Next
Set TryGetSheet = wb.Worksheets(name)
On Error GoTo 0
End Function
Sub HideByNameSafe(name As String, Optional very As Boolean = False, Optional wb As Workbook)
Dim ws As Worksheet
If wb Is Nothing Then Set wb = ThisWorkbook
Set ws = TryGetSheet(name, wb)
If ws Is Nothing Then
MsgBox "対象シートが見つかりません: " & name
Exit Sub
End If
If very Then
ws.Visible = xlSheetVeryHidden
Else
ws.Visible = xlSheetHidden
End If
End Sub
Sub Example_HideSafe()
HideByNameSafe "設定" '通常非表示
HideByNameSafe "機密", True '完全非表示
End Sub
VB- ポイント:
- 存在チェック: ない名前で操作するとエラーになるため、事前判定で回避。
- 可読性: 引数で VeryHidden に切替できると使い回しやすい。
一括操作:複数を非表示/全表示に戻す
Sub HideSheets_ByList(names As Variant, Optional very As Boolean = False)
Dim i As Long, ws As Worksheet
For i = LBound(names) To UBound(names)
Set ws = TryGetSheet(CStr(names(i)))
If Not ws Is Nothing Then
ws.Visible = IIf(very, xlSheetVeryHidden, xlSheetHidden)
End If
Next
End Sub
Sub UnhideAllSheets()
Dim s As Object
For Each s In ThisWorkbook.Sheets
s.Visible = xlSheetVisible
Next
End Sub
VB- ポイント:
- リスト指定: 配列でまとめて非表示。VeryHiddenへの切替も同一ロジック。
- 全表示: すべて表示に戻す一括復帰。VeryHiddenも含めて表示にできます。
例外パターン:除外して一括非表示/部分一致で非表示
Sub HideAllExcept(keepNames As Variant, Optional very As Boolean = False)
Dim keep As Object, name As Variant, s As Worksheet
Set keep = CreateObject("Scripting.Dictionary")
For Each name In keepNames
keep(CStr(name)) = True
Next
For Each s In ThisWorkbook.Worksheets
If Not keep.Exists(s.Name) Then
s.Visible = IIf(very, xlSheetVeryHidden, xlSheetHidden)
End If
Next
End Sub
Sub HideByPartial(partial As String, Optional very As Boolean = False)
Dim s As Worksheet
For Each s In ThisWorkbook.Worksheets
If InStr(1, s.Name, partial, vbTextCompare) > 0 Then
s.Visible = IIf(very, xlSheetVeryHidden, xlSheetHidden)
End If
Next
End Sub
VB- ポイント:
- 除外非表示: 指定した名前だけ残して他を一括で隠す。
- 部分一致: 「一時」「設定」など、名前の揺れに強い。
実務の落とし穴と対策
- 再表示できない仕様:
- VeryHiddenの性質: 画面操作では再表示不可。VBA/VBEでVisibleを書き換える必要があります。
- 全シート非表示は不可:
- 最低1枚は表示: Excelは全てのシートを非表示にはできません。少なくとも1枚は表示状態で残します。
- 参照コードのエラー:
- 非表示後の操作: 非表示にしたシートをアクティブ化・選択しようとすると画面操作は失敗します。処理対象はオブジェクト参照で行い、Select/Activateを避けるのが安全です。
- WorksheetsとSheetsの違い:
- 対象コレクション: グラフシートも含めるならSheets、ワークシート限定ならWorksheets。Visibleはどちらのオブジェクトでも使えます。
例題で練習
例題1:作業用シートを一括で通常非表示にする
Sub Example_HideWorkingSheets()
HideSheets_ByList Array("下書き", "一時", "ログ")
MsgBox "作業用シートを非表示にしました。"
End Sub
VB- ポイント:
- 見栄え整理: 納品や提示用に不要シートを隠す。
例題2:機密系を完全非表示にし、トップだけ残す
Sub Example_HideConfidential_KeepTop()
HideAllExcept Array("トップ")
HideSheets_ByList Array("設定", "機密", "権限"), True '完全非表示
MsgBox "機密シートを完全非表示にし、トップのみ表示にしました。"
End Sub
VB- ポイント:
- 保護運用: VeryHiddenで誤再表示を防ぐ構成が安心。
例題3:名前に「_tmp」を含むシートを完全非表示
Sub Example_HideTmpVery()
HideByPartial "_tmp", True
MsgBox "_tmp を含むシートを完全非表示にしました。"
End Sub
VB- ポイント:
- 命名規則活用: 一時シートの規則名に基づいて自動処理。
