Excelでの作業中、「特定のシートだけを表示して、他は全部隠したい」と思ったことはありませんか?
手作業で一枚一枚シートを非表示にするのは、シート数が増えるほど手間がかかり、ミスの原因にもなりますよね。
本記事では、Excel VBAを使って、指定したシート(またはアクティブシート)以外の全てのシートをまとめて非表示にする実用的なマクロを作成する方法を、初級者の方にも分かりやすく解説します。
このマクロを使えば、煩雑なシート管理から解放され、Excel業務の効率が劇的に向上すること間違いなしです!
なぜExcel VBAでシートを非表示にするのか?
VBAを使ってシートの表示・非表示を制御することには、以下のようなメリットがあります。
- 作業効率の向上: 大量のシートがあるブックで、必要なシートに素早くアクセスできます。
- 情報の整理: ユーザーに見てほしいシートだけを表示し、不要な情報や準備中のシートを隠せます。
- 誤操作の防止: 意図しないシートの編集や削除を防ぎます。
- 見た目の簡潔化: プレゼンテーションやレポート作成時に、プロフェッショナルな印象を与えます。
基本マクロ:指定シート以外を非表示にする
1. シート名を指定して非表示にする
まずは、非表示にしないシートの名前を直接指定する方法です。汎用性が高く、特定のシートを常に表示したい場合に便利です。
Sub HideAllSheetsExceptOneByName()
Dim ws As Worksheet
Dim targetSheetName As String
Dim sheetFound As Boolean
' ★ここに表示させたいシートの名前を指定します★
targetSheetName = "集計結果" ' 例: "Sheet1" や "データ入力" など
sheetFound = False
' 全てのシートをループ
For Each ws In ThisWorkbook.Worksheets
' 指定したシート名と異なる場合のみ非表示にする
If ws.Name <> targetSheetName Then
' シートを非表示に設定 (xlSheetHidden または xlSheetVeryHidden)
ws.Visible = xlSheetHidden
Else
' 指定したシートが見つかったことを記録
sheetFound = True
' 指定シートは必ず表示状態にする
ws.Visible = xlSheetVisible
End If
Next ws
' 指定したシートが存在しない場合のメッセージ
If Not sheetFound Then
MsgBox "'" & targetSheetName & "' という名前のシートは見つかりませんでした。", vbExclamation
End If
End Sub
コード解説:
targetSheetName = "集計結果": ここに表示させたいシートの名前を設定します。この名前のシートだけが表示され続けます。For Each ws In ThisWorkbook.Worksheets: ブック内の全てのシートを一つずつ処理します。If ws.Name <> targetSheetName Then: 現在処理しているシートの名前が、表示させたいシートの名前と異なる場合に条件が真となります。ws.Visible = xlSheetHidden: 条件が真の場合、そのシートを非表示にします。xlSheetVeryHiddenを使うと、ユーザーが手動で再表示できなくなります(VBAからのみ再表示可能)。sheetFound変数で、指定したシートが存在するかどうかを確認し、存在しない場合はメッセージを表示します。
2. アクティブシート以外を非表示にする
現在選択しているシート(アクティブシート)だけを表示し、他を非表示にしたい場合は、以下のマクロが便利です。
Sub HideAllSheetsExceptActive()
Dim ws As Worksheet
Dim activeSheetName As String
' 現在のアクティブシートの名前を取得
activeSheetName = ActiveSheet.Name
' 全てのシートをループ
For Each ws In ThisWorkbook.Worksheets
' アクティブシート名と異なる場合のみ非表示にする
If ws.Name <> activeSheetName Then
ws.Visible = xlSheetHidden
Else
' アクティブシートは必ず表示状態にする
ws.Visible = xlSheetVisible
End If
Next ws
End Sub
コード解説:
activeSheetName = ActiveSheet.Name: 現在アクティブになっているシートの名前を取得します。- 基本的なロジックは上記のマクロと同じで、アクティブシート以外の全てのシートを非表示にします。
非表示にしたシートを全て再表示する方法
非表示にしたシートを元に戻す(全て表示する)マクロも用意しておくと非常に便利です。誤って必要なシートを隠してしまっても、すぐに復元できます。
Sub ShowAllSheets()
Dim ws As Worksheet
' 全てのシートをループ
For Each ws In ThisWorkbook.Worksheets
' シートを表示に設定
ws.Visible = xlSheetVisible
Next ws
End Sub
コード解説:
ws.Visible = xlSheetVisible: 各シートのVisibleプロパティをxlSheetVisibleに設定することで、シートが表示状態になります。
マクロの実行方法
これらのVBAマクロをExcelで実行する手順は以下の通りです。
- VBAエディタを開く: Excelを開き、
Alt + F11キーを押してVBAエディタを起動します。 - 標準モジュールの挿入: 左側のプロジェクトエクスプローラーで、対象のブック(例: VBAProject(Book1))を右クリックし、「挿入」→「標準モジュール」を選択します。
- コードの貼り付け: 新しく開いたモジュールウィンドウに、上記のVBAコードをコピー&ペーストします。
- マクロの実行:
- VBAエディタでコード内にカーソルを置き、
F5キーを押す。 - または、Excelに戻り、「開発」タブ → 「マクロ」から、実行したいマクロを選択して「実行」ボタンをクリックする。
- さらに、図形やボタンにマクロを登録して、ワンクリックで実行できるようにすることも可能です。
- VBAエディタでコード内にカーソルを置き、
- ファイルを保存: マクロを含むブックは、「Excel マクロ有効ブック (*.xlsm)」形式で保存してください。
注意点と応用
xlSheetVeryHiddenの活用: ユーザーにシートを再表示させたくない場合は、ws.Visible = xlSheetVeryHiddenを使用します。この場合、シートはVBAからのみ再表示可能です。- 複数シートの表示: 特定の複数シートだけを表示したい場合は、
If ws.Name <> targetSheetName Thenの部分をIf Not (ws.Name = "シートA" Or ws.Name = "シートB") Thenのように条件を拡張します。 - イベントプロシージャでの利用: ブックを開いたときや、特定のシートが選択されたときに自動でシートを非表示にしたい場合は、
Workbook_OpenやWorkbook_SheetActivateなどのイベントプロシージャ内でマクロを呼び出すことで自動化できます。
まとめ
Excel VBAを活用することで、指定したシート以外をまとめて非表示にする作業は非常に簡単になります。
本記事で紹介したマクロは、日々のExcel作業を効率化し、よりスマートなデータ管理を実現するための強力なツールです。
ぜひご自身の業務に合わせて活用し、Excel作業の自動化を体験してみてください。一度この便利さを知れば、手作業には戻れなくなるはずです!


コメント