Excel VBA 逆引き集 | シートを非表示にする

Excel VBA
スポンサーリンク

シートを非表示にする

「非表示」「完全非表示(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
  • ポイント:
    • 命名規則活用: 一時シートの規則名に基づいて自動処理。
タイトルとURLをコピーしました