今回は、シートの表示・非表示を切り替える方法について解説します。
複数シートを一括で切り替える方法や、シート表示・非表示を判定する方法等、汎用性の高いサンプルコードを掲載しておりますので、是非最後までお付き合いください。
- シートの表示・非表示を切り替える方法が分かります。
- 表示・非表示を切り替える際のエラー発生条件や、エラー回避方法について解説します。
- コピペで使える実践的なコードを掲載します。
前提
マクロ上での非表示シートの扱い
本記事では、シートの表示・非表示を解説しますが、「非表示にしたシートは参照できるのか?」という疑問があると思います。
非表示にしたシートは、マクロ上問題なく参照可能となります。
※特別な構文等は不要です。
基本情報
Visibleプロパティ
シートの表示・非表示を変更する場合、WorksheetオブジェクトのVisibleプロパティを使用します。
Visibleプロパティに、設定値を代入することでシートの表示・非表示を切り替えられます。
また、値の取得(シートの表示・非表示状態の取得)も可能です。
(参考:サンプルコード – シートが非表示であるかを判定する)
構文
WorksheetObject.Visible = 設定値
設定値
True 及び False、または「XlSheetVisibility」定数を指定できます。
XlSheetVisibility定数は、後述します。
- Trueを設定した場合:シートを表示する
- Falseを設定した場合:シートを非表示にする
定数(XlSheetVisibility)
# | 定数 | 説明 |
---|---|---|
1 | xlSheetHidden | シートを非表示にする |
2 | xlSheetVeryHidden | シートを非表示にする ※手動で再表示できない状態にする |
3 | 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
最後に
今回は、シートの表示・非表示を切り替える方法について解説しました。
個人的に、シートの非表示については「マクロに必要なマスタ情報をユーザに見せないように非表示にしておく…」という使い方をしています。
ぜひ、今回の記事の内容を実践してみてください!
コメント