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 シートをまとめて解除する簡易セキュリティマクロを作る。
