VBA シートの存在確認をする

はじめに

Excel VBA マクロでシートが存在するかチェックする方法を紹介します。

Sheets または Worksheets をループして Name プロパティから、シート名で存在チェックできます。

別ブックにシートが存在するか確認できます。

ブックの存在確認をするには「ワークブックの存在確認をする」をご覧ください。
シートを指定して取得するには「シートを取得する」をご覧ください。
  • 目次
    • シートの存在チェックをする
    • 別ブックのシートの存在チェックをする

シートの存在チェックをする

すべてのシート SheetsWorksheets をループして、指定した名前のシートが存在するかで判定できます。

' Sheets に指定した名前のシートが存在するか判定する
Public Function ExistsSheet(ByVal bookName As String)
    Dim ws As Variant
    For Each ws In Sheets
        If LCase(ws.Name) = LCase(bookName) Then
            ExistsSheet = True ' 存在する
            Exit Function
        End If
    Next

    ' 存在しない
    ExistsSheet = False
End Function

戻り値が True なら存在します。False なら存在しません。

次のように引数に存在確認したいシート名を入力します。大文字と小文字は区別しません。

Dim b As Boolean
b = ExistsSheet("Sheet1")  ' シート「Sheet1」が存在するか
b = ExistsSheet("シート2") ' シート「シート2」が存在するか
Debug.Print(b)

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

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

別ブックのシートの存在チェックをする

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

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

アクティブブック

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

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

VBA を実行しているブック

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

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

ブックを指定

ブックの指定に対応するために ExistsBookSheet メソッドを作成します。

' 指定したブックの Sheets に指定した名前のシートが存在するか判定する
Public Function ExistsBookSheet(ByVal book As Workbook, ByVal bookName As String)
    Dim ws As Variant
    For Each ws In book.Sheets
        If LCase(ws.Name) = LCase(bookName) Then
            ExistsBookSheet = True ' 存在する
            Exit Function
        End If
    Next

    ' 存在しない
    ExistsBookSheet = False
End Function

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

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

Dim b As Boolean
' ブック「Book2.xlsx」の Sheet1 が存在するか
b = ExistsBookSheet(Workbooks("Book2.xlsx"), "Sheet1")

 ' 2 番目のブックの Sheet1 が存在するか
b = ExistsBookSheet(Workbooks(2), "Sheet1")

' アクティブブックの Sheet1 が存在するか
b = ExistsBookSheet(ActiveWorkbook, "Sheet1")

' VBA を実行しているブックの Sheet1 が存在するか
b = ExistsBookSheet(ThisWorkbook, "Sheet1")
Debug.Print(b)

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