VBAでファイルが存在するかどうかを確認するには、Dir 関数を使います。ファイルが見つかればファイル名が返り、見つからなければ空の文字("")が返ります。ファイルを開く前にこのチェックを入れておくと、ファイルが存在しないことによるエラーを防げます。
この記事では、次の内容を順番に解説します。
- Dir関数でファイルの存在を確認する基本のコード
- 確認してからファイルを開く流れ
- 複数ファイルをまとめて確認する方法
- ファイルがなければ自動で作る方法
Dir関数でファイルの存在を確認するには?
Dir("ファイルのパス") と書くと、そのファイルが存在するかどうかを調べられます。
If Dir("C:¥test¥sample.xlsx") = "" Then
MsgBox "ファイルが見つかりません。"
Exit Sub
End If
ファイルが見つからなかった場合は空の文字("")が返るので、= "" の条件で「存在しない」と判断できます。
確認してからファイルを開くには?
ファイルを開く処理の前に存在チェックを入れると、ファイルがない場合にエラーで止まらずにメッセージを出して処理を終わらせることができます。
Sub OpenIfExists()
Dim filePath As String
filePath = "C:¥test¥sample.xlsx"
' ファイルの存在を確認する
If Dir(filePath) = "" Then
MsgBox "ファイルが見つかりません。処理を中止します。"
Exit Sub
End If
' ファイルが存在するので開く
Workbooks.Open filePath
MsgBox "ファイルを開きました。"
End Sub
コードの流れ
- ファイルのパスを変数に入れておきます。
Dirでファイルの存在を確認します。- ファイルがなければメッセージを出して処理を止めます。
- ファイルがあれば開いて完了のメッセージを表示します。
複数のファイルをまとめて確認するには?
確認したいファイルが複数ある場合は、それぞれ順番にチェックしていきます。
Sub CheckTwoFiles()
Dim filePath1 As String
Dim filePath2 As String
filePath1 = "C:¥test¥sample1.xlsx"
filePath2 = "C:¥test¥sample2.xlsx"
If Dir(filePath1) = "" Then
MsgBox "ファイル1が見つかりません:" & filePath1
Exit Sub
End If
If Dir(filePath2) = "" Then
MsgBox "ファイル2が見つかりません:" & filePath2
Exit Sub
End If
MsgBox "どちらのファイルも存在しています。"
End Sub
どちらかのファイルが見つからなければ、その時点でメッセージを出して処理を止めます。1つずつ確認しているので、どのファイルが足りないかもすぐにわかります。
まとめ
ファイルの存在確認はマクロを安定して動かすための基本です。ファイルを開く処理を書くときは、最初に Dir でのチェックを入れる習慣をつけましょう。
- 基本の確認:
If Dir(filePath) = "" Thenでファイルがなければ処理を止める。 - ファイルを開く前に確認:存在チェックをしてから
Workbooks.Openを実行する。 - 複数ファイルの確認:
Dirを複数回使って1つずつ確認する。 - なければ作る:
Elseで「存在しない場合の処理」を書く。
よくある質問
ファイルが存在するのに「見つかりません」と出る場合は?
パスの書き方が間違っている可能性が高いです。よくある原因は、フォルダの区切り文字が ¥ ではなく / になっている、ファイル名のスペルミス、拡張子が抜けている、の3つです。MsgBox filePath でパスを画面に表示して確認してみましょう。
フォルダが存在するかどうかも確認できる?
できます。Dir("フォルダのパス", vbDirectory) と書くと、フォルダの存在確認もできます。ファイルと同じく、見つからなければ空の文字が返ります。
Dirを使うとファイルを開いてしまう?
いいえ、Dir はファイルを開きません。存在を確認するだけです。実際にファイルを開くには Workbooks.Open を別途書く必要があります。
ネットワーク上の共有フォルダのファイルも確認できる?
できますが、アクセス権限がない場合は「存在しない」と判定されることがあります。社内の共有フォルダを対象にする場合は、実行するパソコンからそのフォルダにアクセスできる状態かどうかを先に確認してください。
ワイルドカードを使って複数のファイルをまとめて確認できる?
できます。Dir("C:¥test¥*.xlsx") のように *(アスタリスク)を使うと、条件に一致するファイルを検索できます。最初に見つかったファイル名が返り、その後 Dir() と引数なしで呼び出すと次のファイル名が返ります。
動画で学びたい方へ
「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。
VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



