更新日:、 作成日:

VBA ワークブックの存在確認をする

はじめに

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

Workbooks をループして Name プロパティから、ブック名で存在チェックできます。

すでに開いているブックの存在を確認できます。

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

ブックの存在チェックをする

すべてのブック Workbooks をループして、指定した名前のブックが存在するかで判定できます。

' Workbooks に指定した名前のブックが存在するか判定する
Public Function ExistsWorkbook(ByVal bookName As String)
    Dim wb As Workbook
    For Each wb In Workbooks
        If LCase(wb.Name) = LCase(bookName) Then
            ExistsWorkbook = True ' 存在する
            Exit Function
        End If
    Next

    ' 存在しない
    ExistsWorkbook = False
End Function

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

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

Dim b As Boolean
b = ExistsWorkbook("Book1.xlsx")   ' ブック「Book1.xlsx」が存在するか
b = ExistsWorkbook("ブック2.xlsx") ' ブック「ブック2.xlsx」が存在するか
Debug.Print(b)

パスで存在チェック

ブック名ではなくパスで存在確認をするには Workbook.FullName プロパティから絶対パスを取得できます。

' Workbooks に指定したパスのブックが存在するか判定する
Public Function ExistsWorkbook(ByVal fullPath As String)
    Dim wb As Workbook
    For Each wb In Workbooks
        If LCase(wb.FullName) = LCase(fullPath) Then
            ExistsWorkbook = True ' 存在する
            Exit Function
        End If
    Next

    ' 存在しない
    ExistsWorkbook = False
End Function
Dim b As Boolean
' Folder1 のブック「Book1.xlsx」が存在するか
b = ExistsWorkbook("D:\Folder1\Book1.xlsx")
' Folder2 のブック「Book1.xlsx」が存在するか
b = ExistsWorkbook("D:\Folder2\Book1.xlsx")
Debug.Print(b)