VBA シートを非表示にする

はじめに

Excel VBA マクロでシートを表示または非表示にする方法を紹介します。

Sheets.Visible または Worksheets.Visible プロパティから、シートを表示または非表示にできます。

xlSheetHidden または xlSheetVeryHidden を設定して非表示にできます。

xlSheetVisible を設定して表示できます。

シートを指定して取得するには「シートを取得する」をご覧ください。
  • 目次
    • シートを非表示にする
    • シートを表示する
    • 非表示になっているか判定する
    • 別ブックのシートを非表示にする

シートを非表示にする

sheet1

Sheets の引数にインデックスかシート名を指定すると、そのシートを非表示にできます。

1 番左のシートを非表示にするには Sheets(1).Visible = xlSheetHidden または Worksheets(1).Visible = xlSheetHidden を入力します。1 番左のシートが 1 です。

Sheets(1).Visible = xlSheetHidden        ' 1 番左のシートを非表示
Sheets("Sheet1").Visible = xlSheetHidden ' シート「Sheet1」を非表示

Worksheets(1).Visible = xlSheetHidden        ' 1 番左のシートを非表示
Worksheets("Sheet1").Visible = xlSheetHidden ' シート「Sheet1」を非表示
5

Sheets と Worksheets の違いはワークシート以外を取得するかどうかです。

  • Sheets:すべてのシートを取得
  • Worksheets:ワークシートのみ取得(グラフシートなどは取得しない)

完全に非表示

シートを完全に非表示にするには Visible = xlSheetVeryHidden のように入力します。

' 完全に非表示
Worksheets(1).Visible = xlSheetVeryHidden       
Worksheets("Sheet1").Visible = xlSheetVeryHidden

xlSheetVeryHidden で完全に非表示にすると、Excel の操作から表示できなくなります。表示するには下記の「シートを表示する」方法が必要です。

複数のシートを非表示

1 番目と 2 番目のシートを表示または非表示にするには Sheets(Array(1, 2)).Visible または Sheets(Array("Sheet1", "Sheet2")).Visible のように入力します。


Sheets(Array(1, 2)).Visible = xlSheetVisible               ' 1 番目と 2 番目のシートを表示
Sheets(Array("Sheet1", "Sheet2")).Visible = xlSheetVisible ' シート「Sheet1」と「Sheet2」を表示

Worksheets(Array(1, 2)).Visible = xlSheetHidden               ' 1 番目と 2 番目のシートを非表示
Worksheets(Array("Sheet1", "Sheet2")).Visible = xlSheetHidden ' シート「Sheet1」と「Sheet2」を非表示
6

引数に配列でインデックスやシート名を指定します。

すべてのシートを非表示

すべてのシートを非表示にすると「エラー 1004 アプリケーション定義またはオブジェクト定義のエラーです。」が発生します。このため、必ず 1 つはシートを表示する必要があります。

指定したシート以外をすべて非表示にするには次のように入力します。

Dim ws As Worksheet
Set ws = ActiveSheet ' 残すシート

Dim s As Variant
For Each s In Sheets
    If s.Name <> ws.Name Then
        s.Visible = xlSheetHidden    ' すべてのシートを非表示
        ' s.Visible = xlSheetVisible ' すべてのシートを表示
    End If
Next

シートを表示する

シートを表示するには Visible = xlSheetVisible のように入力します。

Sheets(1).Visible = xlSheetVisible        ' 1 番目のシートを表示
Sheets("Sheet1").Visible = xlSheetVisible ' シート「Sheet1」を表示

Worksheets(1).Visible = xlSheetVisible        ' 1 番目のシートを表示
Worksheets("Sheet1").Visible = xlSheetVisible ' シート「Sheet1」を表示

xlSheetVeryHidden で完全に非表示にしているシートは、この方法でのみ表示できます。

非表示になっているか判定する

シートが非表示になっているか判定するには Visible = xlSheetVisible が True なら表示、False なら非表示です。

' 非表示になっているシートを判定する
Dim ws As Worksheet
For Each ws In Worksheets
    If ws.Visible = xlSheetVisible Then
        Debug.Print("表示")
    Else
        Debug.Print("非表示")
        ' ws.Visible = xlSheetVisible ' 表示する
    End If
Next

別ブックのシートを非表示にする

ブックを指定しないシートの操作はすべて「アクティブブック」に対して行われます。

  • アクティブブック:開いているすべてのブックの中で一番手前に表示されているブックです。
  • VBA を実行しているブック:実行している VBA のコードがあるブックです。

アクティブブック

ブックを指定しないシートの操作は、アクティブブックを表す ActiveWorkbook. が省略されています。

' どちらも同じコード
Call Sheets.Add
Call ActiveWorkbook.Sheets.Add
ショートカットや VBA の IDE から実行したときに、別ブックがアクティブになっていることがあります。

VBA を実行しているブック

VBA を実行しているブックに対して操作するには ThisWorkbook を入力します。

' VBA を実行しているブックに対して操作
Call ThisWorkbook.Sheets.Add
Call ThisWorkbook.Worksheets.Add

ブックを指定

ブックを指定するには Workbooks の引数にブック名またはインデックスを指定します。

ブック「Book2.xlsx」を指定するには Workbooks("Book2.xlsx") を入力します。

' ブック「Book2.xlsx」のシート「Sheet1」を非表示
Workbooks("Book2.xlsx").Sheets("Sheet1").Visible = xlSheetHidden

' 2 番目のブックの 1 番目のシートを非表示
Workbooks(2).Sheets(1).Visible = xlSheetHidden

' アクティブブックのシートを非表示
ActiveWorkbook.Sheets("Sheet1").Visible = xlSheetHidden

' VBA を実行しているブックのシートを非表示
ThisWorkbook.Sheets(2).Visible = xlSheetHiddent

Workbooks のインデックスは、ブックを開いた順番に 1 からスタートします。