【Excel VBA】シートの表示・非表示の切り替え(Visible)

はじめに

今回は、シートの表示・非表示を切り替える方法について解説します。
複数シートを一括で切り替える方法や、シート表示・非表示を判定する方法等、汎用性の高いサンプルコードを掲載しておりますので、是非最後までお付き合いください。

この記事を読むメリット
  • シートの表示・非表示を切り替える方法が分かります。
  • 表示・非表示を切り替える際のエラー発生条件や、エラー回避方法について解説します。
  • コピペで使える実践的なコードを掲載します。

前提

マクロ上での非表示シートの扱い

本記事では、シートの表示・非表示を解説しますが、「非表示にしたシートは参照できるのか?」という疑問があると思います。

非表示にしたシートは、マクロ上問題なく参照可能となります。
※特別な構文等は不要です。

基本情報

Visibleプロパティ

シートの表示・非表示を変更する場合、WorksheetオブジェクトのVisibleプロパティを使用します。
Visibleプロパティに、設定値を代入することでシートの表示・非表示を切り替えられます。

また、値の取得(シートの表示・非表示状態の取得)も可能です。
(参考:サンプルコード – シートが非表示であるかを判定する

構文

構文

WorksheetObject.Visible = 設定値

設定値

True 及び False、または「XlSheetVisibility」定数を指定できます。
XlSheetVisibility定数は、後述します。

設定値
  • Trueを設定した場合:シートを表示する
  • Falseを設定した場合:シートを非表示にする

定数(XlSheetVisibility)

#定数説明
1xlSheetHiddenシートを非表示にする
2xlSheetVeryHiddenシートを非表示にする
※手動で再表示できない状態にする
3xlSheetVisibleシートを表示する
XlSheetVisibility列挙型 – 定数

xlSheetVeryHiddenを指定すると、Excelのメニューからシートを再表示することが出来なくなります。
一度、xlSheetVeryHiddenを指定したシートを再表示するには、VBAから True もしくは xlSheetVisibleを指定します。

すべてのシートを非表示状態にしてしまうとエラーが発生します。
必ず、表示状態のシートを1つは確保するようにしましょう。

サンプルコード

シートを非表示にする

サンプルコード
Public Sub sheetHidden()

    ' 「Sheet1」シートを非表示にする
    Worksheets("Sheet1").Visible = False
End Sub

上記のサンプルでは「Sheet1」を指定していますが、場合によって変更してください。
以下記事にて、シートの参照については詳しく解説しています。

シートが非表示であるかを判定する

サンプルコード
Public Sub checkSheetVisible()
    Dim ws As Worksheet ' Worksheetオブジェクト

    ' Worksheetオブジェクトを設定
    Set ws = Worksheets(1)

    ' 非表示であるかを判定
    If ws.Visible = False Then

        ' 非表示の場合

        MsgBox Worksheets(1).Name & "は非表示状態です。", vbInformation
    End If
End Sub

複数シートを一括で非表示にする

非表示シートを指定

サンプルコード
Public Sub sheetVisible()
    Dim hiddenSheetStr() As Variant ' 非表示シート名 配列
    Dim sheetName As Variant        ' 非表示シート名

    ' 非表示にするシート名をセット
    hiddenSheetStr = Array("Sheet2", "Sheet3")

    ' シート分ループ
    For Each sheetName In hiddenSheetStr
    
        ' シートを非表示にする
        Worksheets(sheetName).Visible = False
    Next sheetName
End Sub
りゅう

上記サンプルではシート名を指定していますが、シート番号に変更頂いても構いません。

表示シートを指定

サンプルコード
Public Sub sheetVisible()
    Dim visibleSheetStr() As Variant    ' 表示シート名 配列
    Dim sheetName As Variant            ' 非表示シート名
    Dim ws As Worksheet                 ' Worksheetオブジェクト
    Dim visibleFlag As Boolean          ' 表示フラグ

    ' 表示するシート名をセット
    visibleSheetStr = Array("Sheet1")

    ' 全シート分ループ
    For Each ws In Worksheets

        ' 表示フラグの初期化
        visibleFlag = False

        ' 表示シート名分ループ
        For Each sheetName In visibleSheetStr

            ' シート名が表示シートに該当する場合
            If sheetName = ws.Name Then

                ' 表示する
                visibleFlag = True
                Exit For
            End If
        Next sheetName

        ' シートの表示・非表示
        ws.Visible = visibleFlag
    Next ws
End Sub

全シートを一括で表示状態にする

サンプルコード
Public Sub sheetAllVisible()
    Dim ws As Worksheet ' Worksheetオブジェクト

    ' 全シートをループ
    For Each ws In Worksheets

        ' シートを表示状態に変更
        ws.Visible = True
    Next ws
End Sub

最後に

今回は、シートの表示・非表示を切り替える方法について解説しました。

個人的に、シートの非表示については「マクロに必要なマスタ情報をユーザに見せないように非表示にしておく…」という使い方をしています。

ぜひ、今回の記事の内容を実践してみてください!

オススメの書籍
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

大手外資系コンサルティングファーム勤務。ExcelVBA歴は8年。金融関係のプロジェクトにて約100万レコードを処理するマクロの開発実績あり。ExcelVBAの基礎・応用情報を発信中。

コメント

コメントする

CAPTCHA