【Excel VBA】選択シート以外をまとめて非表示にするマクロ!複数シートの表示制御を自動化

Excel・VBA

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で実行する手順は以下の通りです。

  1. VBAエディタを開く: Excelを開き、Alt + F11 キーを押してVBAエディタを起動します。
  2. 標準モジュールの挿入: 左側のプロジェクトエクスプローラーで、対象のブック(例: VBAProject(Book1))を右クリックし、「挿入」→「標準モジュール」を選択します。
  3. コードの貼り付け: 新しく開いたモジュールウィンドウに、上記のVBAコードをコピー&ペーストします。
  4. マクロの実行:
    • VBAエディタでコード内にカーソルを置き、F5 キーを押す。
    • または、Excelに戻り、「開発」タブ → 「マクロ」から、実行したいマクロを選択して「実行」ボタンをクリックする。
    • さらに、図形やボタンにマクロを登録して、ワンクリックで実行できるようにすることも可能です。
  5. ファイルを保存: マクロを含むブックは、「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作業の自動化を体験してみてください。一度この便利さを知れば、手作業には戻れなくなるはずです!

コメント

タイトルとURLをコピーしました