目次
- 1. はじめに:なぜ「再表示」ボタンがグレーアウトして押せないのか
- 2. シートが再表示できない最大の原因「xlSheetVeryHidden」とは
- 3. マクロを使わずに手動で「完全な非表示」を解除して戻す手順
- 4. VBEを使ってもシートを再表示できない・プロパティが変更できない別の原因
- 5. 【コピペで完了】非表示シートを一括で再表示するVBAマクロの書き方
- 6. 応用編:逆にシートを「完全な非表示」にするマクロの書き方
- 7. まとめ:シートの非表示属性を正しく理解してExcelを管理しよう
1. はじめに:なぜ「再表示」ボタンがグレーアウトして押せないのか
Excelを使用していると、「シートタブを右クリックしても『再表示』のメニューが出てこない」「再表示ボタンがグレーアウトしていて押せない」というトラブルに直面することがあります。他の人が作ったマクロ(VBA)が組み込まれたファイルや、システムから出力されたExcelファイルにおいて非常によく発生する現象です。
通常のExcelの操作(シートタブを右クリックして「非表示」を選択する操作)で隠したシートであれば、同じく右クリックから「再表示」を選ぶことで簡単に元に戻すことができます。しかし、VBAを用いて特定の属性を付与して非表示にされたシートは、Excelの通常の操作画面(ユーザーインターフェース)からは存在を確認することすらできず、手動で戻すことができなくなります。
この記事では、VBAによってシートが再表示できなくなる技術的な原因と、それを解除して元に戻すための確実な方法を解説します。また、複数の非表示シートが存在する場合に、それらをワンクリックで一括表示させるための便利なVBAマクロのコードも網羅して紹介します。この記事を読むことで、どんなに強固に隠されたシートであっても、自在に表示・非表示をコントロールできるようになります。
2. シートが再表示できない最大の原因「xlSheetVeryHidden」とは
Excelの標準機能で非表示にされたシートと、VBAによって非表示にされたシートの違いは、VBAの「Visible(ビジブル)プロパティ」に設定されている値の違いにあります。
2-1. Worksheet.Visibleプロパティの3つの状態
Excelの各シートが持っている表示・非表示を司る「Visible」プロパティには、実は3つの段階(定数)が存在します。
- xlSheetVisible (値:-1)
シートが通常通り表示されている状態です。 - xlSheetHidden (値:0)
通常の「非表示」状態です。ユーザーがシートタブを右クリックして「非表示」にした場合はこの状態になります。この状態であれば、右クリックメニューの「再表示」からいつでも元に戻すことができます。 - xlSheetVeryHidden (値:2)
これが再表示できない原因の正体です。「完全な非表示(非常に隠された状態)」を意味します。このプロパティが設定されたシートは、Excelの通常の画面からは「再表示」のリストにすら表示されなくなります。これを解除するには、再度VBA(またはVBEの画面)から設定を変更するしかありません。
2-2. なぜ開発者は「完全な非表示(VeryHidden)」を使うのか
「なぜわざわざ元に戻せないような厄介な隠し方をするのか?」と疑問に思うかもしれません。しかし、Excelツールやシステムを開発する側にとって、この「xlSheetVeryHidden」は非常に重要なセキュリティおよび誤操作防止の役割を果たしています。
例えば、マクロの動作に必要な「設定値のリスト」「データベースから取得した生のデータ」「ドロップダウンリストの参照元データ」などが書かれたシートを一般ユーザーが誤って編集・削除してしまうと、マクロそのものがエラーで動かなくなってしまいます。
通常の「非表示(xlSheetHidden)」では、少しExcelに詳しいユーザーであれば簡単に再表示して中身を書き換えてしまうリスクがあります。そこで、システムの中枢となる重要なデータシートを保護するために、意図的に「xlSheetVeryHidden」を用いて、一般ユーザーからは絶対に見えない・触れないように隠しているのです。
3. マクロを使わずに手動で「完全な非表示」を解除して戻す手順
もしあなたが非表示にされたシートの中身を確認したいだけであれば、新しくマクロを書かなくても、VBE(Visual Basic Editor)の画面から数回のクリックで簡単に再表示させることができます。ここでは2つの手動復元方法を解説します。
3-1. VBE(Visual Basic Editor)のプロパティウィンドウを使った復元方法
最もオーソドックスで、視覚的に分かりやすい方法です。
- 対象のExcelファイルを開いた状態で、キーボードの
Alt+F11キーを押します。これでVBE(Visual Basic Editor)が起動します。 - 画面左上に「プロジェクトエクスプローラー」が表示されていることを確認します。(表示されていない場合は
Ctrl+Rキーを押すか、メニューの「表示」>「プロジェクトエクスプローラー」をクリックします) - 画面左下に「プロパティウィンドウ」が表示されていることを確認します。(表示されていない場合は
F4キーを押すか、メニューの「表示」>「プロパティウィンドウ」をクリックします) - プロジェクトエクスプローラーの中に、「VBAProject (あなたのファイル名.xlsxなど)」というツリーがあり、その中の「Microsoft Excel Objects」を展開します。
- 非表示になっているシート名(例:Sheet2)をクリックして選択します。
- 下の「プロパティウィンドウ」の一番下にある項目 「Visible」 を確認します。ここが「2 – xlSheetVeryHidden」になっているはずです。
- 「Visible」の右側のドロップダウンリストをクリックし、「-1 – xlSheetVisible」 に変更します。
- Excelの画面に戻ると、完全に隠されていたシートが再表示されています。
3-2. イミディエイトウィンドウを使って1行で解決する方法
プロパティウィンドウを使うよりもさらに素早く解除したい場合は、イミディエイトウィンドウを使用します。
Alt+F11キーでVBEを開きます。Ctrl+Gキーを押して「イミディエイトウィンドウ」を表示させます(通常は画面下部に表示されます)。- イミディエイトウィンドウに以下の1行を入力し、Enterキーを押します。
Worksheets("隠されているシート名").Visible = True
※「隠されているシート名」の部分は、実際のシート名に書き換えてください。
Enterキーを押した瞬間にコードが実行され、即座にシートが表示されます。VBAにおいて Visible = True を指定することは Visible = xlSheetVisible を指定することと同義になります。
4. VBEを使ってもシートを再表示できない・プロパティが変更できない別の原因
上記の手順で「Visible」プロパティを「-1 – xlSheetVisible」に変更しようとした際、「プロパティを設定できません。」というエラーメッセージが出たり、項目がグレーアウトして変更できない場合があります。その場合は以下の原因が考えられます。
4-1. ブックの保護(構造の保護)がかけられている
Excelの「校閲」タブにある「ブックの保護」機能(構造の保護)が有効になっている場合、シートの追加、削除、非表示、再表示といったシート構成に関わる一切の操作がロックされます。これはVBAからのプロパティ変更に対しても有効に機能します。
【解決策】
Excelの画面に戻り、「校閲」タブ > 「ブックの保護」をクリックして保護を解除してください。パスワードが設定されている場合は、正しいパスワードを入力して解除しない限り、シートを再表示することは不可能です。
4-2. ブック自体がアドイン(.xlam)として保存されている
ファイルの拡張子が「.xlam(Excelアドイン)」の場合、アドインの仕様としてすべてのシートが非表示(バックグラウンドで動作)になります。IsAddinプロパティがTrueになっているため、個別のシートのVisibleプロパティを単独で変更することはできません。
【解決策】
VBEのプロパティウィンドウで、「ThisWorkbook」を選択し、「IsAddin」プロパティを「False」に変更することで、通常のブックとしての表示に戻すことができます。(ただし、アドインとして機能させるために意図的に行われているため、仕組みを理解せずに変更するとツールが壊れる可能性があります)
5. 【コピペで完了】非表示シートを一括で再表示するVBAマクロの書き方
ファイルの中に「完全な非表示」のシートが5枚も10枚もある場合、手動でプロパティを1つずつ変更していくのは非常に手間がかかります。そこで、ブック内のすべての非表示シートを瞬時に一括表示するVBAマクロを作成します。
5-1. すべてのワークシートを一括で再表示する基本コード
最もシンプルに、対象ブック(現在アクティブなブック)にあるすべての「ワークシート」をループ処理で確認し、表示状態にするコードです。「通常の非表示(0)」も「完全な非表示(2)」もすべて一括で表示されます。
Sub UnhideAllWorksheets()
Dim ws As Worksheet
' 画面の更新を一時停止(処理を高速化し、画面のチラつきを防ぐ)
Application.ScreenUpdating = False
' ブック内のすべてのワークシートをループ処理
For Each ws In ActiveWorkbook.Worksheets
' シートが表示されていない場合のみ処理を実行
If ws.Visible <> xlSheetVisible Then
ws.Visible = xlSheetVisible
End If
Next ws
' 画面の更新を再開
Application.ScreenUpdating = True
MsgBox "すべてのワークシートを再表示しました。", vbInformation, "処理完了"
End Sub
5-2. グラフシートなども含めた「すべてのシート」を再表示するコード
Excelには、セルが並んだ通常の「ワークシート」のほかに、グラフ単体がシートになっている「グラフシート」や、古いバージョンの「マクロシート」などが存在します。
上記の Worksheets コレクションを使ったループでは、グラフシートの非表示は解除できません。すべての種類のシートを確実に再表示したい場合は、Worksheets ではなく Sheets コレクションを使用します。
Sub UnhideAllSheets()
Dim sh As Object
Application.ScreenUpdating = False
' WorksheetsではなくSheetsコレクションを使用することで全種類のシートを対象にする
For Each sh In ActiveWorkbook.Sheets
If sh.Visible <> xlSheetVisible Then
sh.Visible = xlSheetVisible
End If
Next sh
Application.ScreenUpdating = True
MsgBox "グラフシートを含むすべてのシートを再表示しました。", vbInformation, "処理完了"
End Sub
5-3. ブックの保護エラーを回避する実戦向け・安全な一括表示コード
実際に業務でマクロを運用する場合、「ブックの保護」がかかっているファイルに対して上記のコードを実行すると、「実行時エラー ‘1004’: Worksheet クラスの Visible プロパティを設定できません。」というエラーでマクロが強制停止してしまいます。
そういった事態を防ぐため、事前にブックの保護状態をチェックし、保護されている場合は警告メッセージを出して安全に処理を終了する実戦向けのコードを紹介します。
Sub UnhideAllSheets_Safe()
Dim sh As Object
Dim count As Long
count = 0
' ブックの保護(構造の保護)がかかっているかチェック
If ActiveWorkbook.ProtectStructure = True Then
MsgBox "ブックが保護されているため、シートの再表示ができません。" & vbCrLf & _
"「校閲」タブから「ブックの保護」を解除してから再実行してください。", vbExclamation, "エラー"
Exit Sub ' 処理を強制終了
End If
Application.ScreenUpdating = False
' シートの再表示処理
For Each sh In ActiveWorkbook.Sheets
If sh.Visible <> xlSheetVisible Then
sh.Visible = xlSheetVisible
count = count + 1
End If
Next sh
Application.ScreenUpdating = True
' 結果の報告
If count > 0 Then
MsgBox count & & "枚のシートを再表示しました。", vbInformation, "処理完了"
Else
MsgBox "非表示になっているシートはありませんでした。", vbInformation, "確認"
End If
End Sub
このコードを「標準モジュール」に貼り付けて実行することで、エラーによる停止を回避しつつ、安全に一括再表示を行うことができます。
6. 応用編:逆にシートを「完全な非表示」にするマクロの書き方
最後に、あなた自身がツールを作成する側になった際、ユーザーに見せたくない設定シートなどを「完全な非表示(xlSheetVeryHidden)」にするためのコードも紹介しておきます。
特定のシート(例:Sheet2)をマクロから隠す場合は、以下のように記述します。
Sub SetSheetVeryHidden()
' "設定用シート"という名前のシートをユーザー操作で再表示できないように隠す
Worksheets("設定用シート").Visible = xlSheetVeryHidden
MsgBox "シートを完全に非表示にしました。", vbInformation, "完了"
End Sub
※注意点として、ブック内のすべてのシートを非表示にすることはExcelの仕様上できません。必ず最低1つのシートは「表示(xlSheetVisible)」状態にしておく必要があります。
7. まとめ:シートの非表示属性を正しく理解してExcelを管理しよう
VBAで非表示にされたシートが戻せない原因と、その解決策について詳しく解説しました。内容をまとめると以下の通りです。
- 通常の操作で再表示できないシートは、Visibleプロパティが「xlSheetVeryHidden(完全な非表示)」に設定されていることが原因。
- 手動で戻す場合は、VBE(Alt + F11)を起動し、プロパティウィンドウからVisibleを「-1 – xlSheetVisible」に変更する。
- プロパティが変更できない場合は、「ブックの保護」がかけられていないか確認し、解除する。
- 大量の非表示シートがある場合は、For Each文を用いたVBAマクロ(WorksheetsやSheetsコレクションのループ処理)を実行することで一瞬で一括表示が可能。
「xlSheetVeryHidden」の概念を知らないと、「ファイル容量は大きいのにデータが見当たらない」「システムがどこから数値を引っ張ってきているのか分からない」といったトラブルで長時間悩まされることになります。
今回ご紹介した仕組みとマクロコードを手元に控えておけば、他人が作った複雑なExcelファイルを引き継いだ際にも、内部の構造を迅速に解析・修正できるようになるはずです。日々の業務効率化やVBA開発にぜひお役立てください。