Excel VBA 逆引き集 | VeryHidden を戻す

Excel VBA
スポンサーリンク

VeryHidden を戻す(再表示する)

「VeryHidden」にしたシートは、Excelの画面操作(右クリックやメニュー)からは再表示できません。
VBAで Visible プロパティを xlSheetVisible に戻す必要があります。初心者でも安心して使えるように、基本コードから安全テンプレート、例題まで丁寧に解説します。


基本:VeryHidden を解除して再表示する

Sub UnhideVeryHidden_Basic()
    ThisWorkbook.Worksheets("機密").Visible = xlSheetVisible
End Sub
VB
  • ポイント:
    • Visible = xlSheetVisible に設定すると再表示されます。
    • xlSheetHidden は「通常の非表示」、xlSheetVisible は「表示」、xlSheetVeryHidden は「完全非表示」です。

安全テンプレート:存在チェック+切替

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 ShowSheetSafe(sheetName As String, 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 = xlSheetVisible
End Sub

Sub Example_ShowSafe()
    ShowSheetSafe "機密"
End Sub
VB
  • ポイント:
    • 存在しない名前を指定するとエラーになるので、TryGetSheetで安全にチェック。
    • ShowSheetSafeで「見つかったら表示」にまとめておくと再利用しやすいです。

一括で VeryHidden を戻す

Sub UnhideAllVeryHiddenSheets()
    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
  • ポイント:
    • 全シートを走査して、Visible = xlSheetVeryHidden のものだけ再表示。
    • 一括解除用の定番コードです。

部分一致で VeryHidden を戻す(例:「tmp」を含むシート)

Sub UnhideByPartial(partial As String)
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        If InStr(1, ws.Name, partial, vbTextCompare) > 0 Then
            ws.Visible = xlSheetVisible
        End If
    Next
End Sub

Sub Example_UnhideTmp()
    UnhideByPartial "tmp"
End Sub
VB
  • ポイント:
    • 名前に「tmp」や「一時」を含むシートをまとめて再表示。
    • 命名規則を活用すると効率的です。

例題で練習

例題1:パスワード入力後に VeryHidden を解除

Sub UnhideWithPassword()
    Dim pwd As String
    pwd = InputBox("パスワードを入力してください")
    If pwd = "secret123" Then
        ShowSheetSafe "機密"
        MsgBox "機密シートを再表示しました。"
    Else
        MsgBox "パスワードが違います。"
    End If
End Sub
VB
  • ポイント:
    • 簡易的なセキュリティとして、パスワード入力後に解除する仕組み。
    • 実務では「設定シート」や「機密シート」を守る用途に便利です。

例題2:VeryHidden のシート一覧をログに出力して再表示

Sub LogAndUnhideVeryHidden()
    Dim ws As Worksheet, out As Worksheet, r As Long
    Set out = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
    out.Name = "UnhideLog"
    out.Range("A1").Value = "再表示したシート一覧"

    r = 2
    For Each ws In ThisWorkbook.Worksheets
        If ws.Visible = xlSheetVeryHidden Then
            ws.Visible = xlSheetVisible
            out.Cells(r, 1).Value = ws.Name
            r = r + 1
        End If
    Next
    MsgBox "VeryHidden のシートを再表示し、ログを作成しました。"
End Sub
VB
  • ポイント:
    • 再表示したシート名を新しいログシートに一覧化。
    • 「どのシートを解除したか」を記録できるので安心です。

実務の落とし穴と対策

  • 全シート非表示は不可: Excelは最低1枚は表示状態で残す必要があります。
  • 解除方法を忘れる: VeryHiddenはユーザーが戻せないので、解除用マクロを必ず用意。
  • ActiveSheet操作の失敗: 非表示にしたシートを Select するとエラー。処理はオブジェクト参照で行う。
  • WorksheetsとSheetsの違い: グラフシートを含めないなら Worksheets を使うと混乱が減ります。

次の一歩(小課題)

  • 課題1: 「Control」シートに一覧(A列)を作り、その名前のシートをすべて再表示する。
  • 課題2: 「tmp」「draft」を含むシートを自動で再表示し、ログシートに処理結果を書き出す。
  • 課題3: パスワード入力後に複数の VeryHidden シートをまとめて解除する簡易セキュリティマクロを作る。
タイトルとURLをコピーしました