Excel VBA 指定したファイルが存在するか確認する方法

ファイル/フォルダ操作

VBAで指定したファイルが存在するかどうか、確認する方法についてご説明します。

ファイルを読み込んだり、開いたりする際に指定したファイルが存在しないとエラーになります。

エラー回避には必要となるコードになりますので、覚えておくと便利です。

その他のファイルの操作については下記記事をご覧ください。

1.ファイルの存在を確認する方法

直接フルパスでファイルを指定する場合に、存在しないファイル名を指定してファイルを開こうとした場合、対策していないとエラーになります。

そこで、指定したフォルダやファイルが存在しているかチェックします。

ファイルの存在をチェックするには「Dir関数」を使用するか、「FileExistsメソッド」を使用します。

まずは「Dir関数」と「FileExistsメソッド」について説明したいと思います。

Dir関数

指定したファイルまたはフォルダの名前を返えす関数です。

「*」といったワイルドカードを使用する事が出来ます。

構文は次のように記述します。

Dir[(PathName[,Attributes])]

PathName」は省略可能で、ファイル名やフォルダ名を表す文字列を指定します。

引数「Attributes」も省略で、取得するファイルの属性を表す数式もしくは定数を指定します。

指定したファイルが存在した場合はそのファイル名を返し、存在しない場合は空文字列を返します。

引数「Attributes」を省略した場合、直前に指定したファイル名且つ、検索にかかっていないファイル名が返されます。

この存在しない場合は空文字列を返す特徴を利用して、ファイルが存在するか確認します。

FileExistsメソッド

「Exists」はFileSystemObjectのメソッドです。

こちらは、指定したファイルが存在する場合はTrueを返します。

こちらの方法でもチェックする事ができます。

2.ファイルの存在を確認するコード

それでは「Dir関数」と「Existsメソッド」でファイルが存在するか確認するサンプルコードです。

Cドライブにある「Sample」というフォルダ内の「Book1.xlsx」というファイルが存在するか確認して、存在する場合は開きます。

Dir関数で確認するコード

Sub Sample1()

If Dir("C:\Sample\Book1.xlsx") <> "" Then

    Workbooks.Open "C:\Sample\Book1.xlsx"
    
End If

End Sub
コードの説明

If Dir(“C:\Sample\Book1.xlsx”) <> “” Thenで指定したファイルが存在すればファイル名を返すか判定します。

存在しなければ空文字列となるため「<>””」がFalseになります。

「Workbooks.Open “C:\Sample\Book1.xlsx”」で存在した場合はファイルを開きます。

FileExistsメソッドで確認するコード

FileSystemObjectのExistsメソッドで確認するコードです。

Sub Sample2()

Dim Target As String

Target = "C:\Sample\Book1.xlsx"

With CreateObject("Scripting.FileSystemObject")

    If .FileExists(Target) Then
    
        Workbooks.Open Target
    
    End If
    
End With
    
End Sub
コードの説明

「CreateObject(“Scripting.FileSystemObject”)」でFileSystemObjectを使用できるようにします。

「If .FileExists(Target) Then」で指定したファイルが存在するか判定します。

少し丁寧なコード

FSOを使用したコードを少し丁寧に記述すると次のようになります。

Object変数を宣言して、変数にFileSystemObjectをセットします。

オブジェクトを何度も使用する場合などは次のように記述した方が可読性も高く、コードもシンプルになると思います。

Sub Sample3()

Dim Target As String
Dim FSO As Object

Set FSO = CreateObject("Scripting.FileSystemObject")

Target = "C:\Sample\Book1.xlsx"

With FSO

    If .FileExists(Target) Then
    
        Workbooks.Open Target
    
    End If
    
End With
    
End Sub
タイトルとURLをコピーしました