Excel VBA 逆引き集 | VeryHidden にする

Excel VBA
スポンサーリンク

シートを VeryHidden にする

Excel VBA で「シートを非表示」にする方法には HiddenVeryHidden の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で安全にチェック。
    • modexlSheetHidden / 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 にしたシートをパスワード入力後に再表示する簡易セキュリティマクロを作る。
タイトルとURLをコピーしました