ファイルがないと処理が止まる?
Excel VBAでファイルを開く処理を行うとき、指定したファイルが存在しなければエラーが発生して、マクロが止まってしまいます。これは利用者にとって不親切ですし、業務の流れを止めてしまう原因になります。
そこで活用したいのが、ファイルの存在確認(チェック)を自動で行う仕組みです。事前に存在を確認してから処理を進めれば、エラーを未然に防げて、より安定したマクロにできます。
実装するメリット
- エラーを未然に防ぐことができる
- 利用者にわかりやすく状況を伝えられる
- 不要な処理や存在しないファイルへのアクセスを防げる
Dir関数でファイルを確認する
ファイルの存在確認には Dir
関数を使います。
If Dir("C:\test\sample.xlsx") = "" Then
MsgBox "ファイルが見つかりません。"
Exit Sub
End If
解説
Dir("ファイルパス")
は、指定したファイルがあればファイル名を表示し、なければ空の文字(””)となります。- そのため、空文字だった場合に「存在しない」と判断できます。
- 処理の最初にこの確認を入れておけば、安全にマクロを動かせます。
具体例:存在チェック+ファイルを開く
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
解説
- 変数を2つ用意して順番に確認する方法です
Dir
を2回使っていますが、どちらも正しく動作します- 初心者でも読みやすく、1つずつ確認する流れが見えやすくなっています
応用:存在しない場合に自動で作る(CSVなど)
Sub CreateIfMissing()
Dim filePath As String
filePath = "C:\test\log.csv"
If Dir(filePath) = "" Then
Open filePath For Output As #1
Print #1, "ログファイルを作成しました:" & Now
Close #1
MsgBox "ファイルがなかったので新規作成しました。"
Else
MsgBox "ファイルはすでに存在しています。"
End If
End Sub
解説
- 存在しないときは
Output
で新しく作成 Print
で初期メッセージを書き込み- ログファイルやCSV生成などに応用できます
よくある注意点
- パスが間違っていると、常に「存在しない」判定になる
Dir
は1回の使用で検索状態がリセットされるため、複数のファイルを扱う場合はそれぞれ個別に確認する必要があります- ネットワークドライブ(共有フォルダなどは注意)では権限が関係してくることがある
まとめ
ファイルの存在確認は、マクロをスムーズに運用するためにとても重要な要素です。
Dir
関数を使えば簡単にチェックできる- 処理の最初に入れておけば、不要なエラーや混乱を回避できる
- 必要に応じて、複数チェックや自動作成にも応用可能
まずはよく使うファイルを対象に、存在確認のコードをマクロの先頭に書き加えてみましょう。マクロの信頼性が一気に高まります。
コメント