1. 導入:なぜこの処理が重要なのか
Webサイトで「お探しのページがみつかりませんでした」というエラーに出くわすと困りますよね。実は、Excel VBAの実務でも同じような問題が発生します。他部署から共有されたブックを開こうとしたり、特定のパスにあるファイルを参照しようとした時に、ファイルが移動・削除されていてマクロがエラーで止まってしまうことはありませんか?
この「ファイルが見つからない」という状況を事前に検知し、安全に処理を分岐させる技術は、堅牢なツールを作る上で欠かせないスキルです。
2. 基礎知識:Dir関数とファイル存在確認の仕組み
VBAでファイルが存在するか確認するために最も一般的なのがDir関数です。
Dir関数は、指定したパスにファイルが存在すれば「そのファイル名」を返し、存在しなければ「空文字(””)」を返します。この仕組みを利用して、「もし結果が空文字なら、処理を中断してメッセージを表示する」というロジックを組むのが定石です。
3. 実装:エラーを防ぐための論理的な手順
1. 確認したいファイルのフルパスを取得(または指定)する。
2. Dir関数を使って、そのパスのファイルが存在するかチェックする。
3. 条件分岐(If文)を使い、ファイルがある場合は処理を実行、ない場合はエラーメッセージを表示して終了する。
この手順を踏むことで、マクロが強制終了するのを防ぎ、ユーザーに対して「ファイルがありません」と親切に伝えることができます。
4. サンプルプログラム:実務で使える存在確認コード
以下のコードは、指定したExcelブックを開く前に、ファイルが存在するかを確認する実用的なテンプレートです。
Sub OpenWorkbookSafely()
‘ 確認したいファイルのパス(適宜書き換えてください)
Dim filePath As String
filePath = “C:\Users\Documents\TargetData.xlsx”
‘ Dir関数でファイルが存在するか確認
If Dir(filePath) = “” Then
‘ ファイルが見つからない場合の処理
MsgBox “指定されたファイルが見つかりません。” & vbCrLf & _
“ファイルが移動または削除された可能性があります。”, vbExclamation, “エラー”
Exit Sub ‘ ここで処理を終了する
End If
‘ ファイルがある場合のみ開く
Workbooks.Open filePath
MsgBox “ファイルを開きました。”
End Sub
5. 応用・注意点:現場でのトラブル回避
パスの指定には注意が必要です
ネットワーク上の共有サーバー(UNCパス:\\Server\Folder\…)を指定する場合、Dir関数が正しく動作しない環境や、ネットワークの遅延で「見つからない」と誤判定されることがあります。その場合は、FileSystemObject (FSO) というライブラリを使うのがより確実です。
FSOを使用する場合は、「FileExistsメソッド」を使うことで、より高度で直感的な判定が可能になります。
また、ファイル名だけでなく「フォルダそのもの」が存在するかを確認したい場合も、Dir関数の末尾に「\」を付けることで判定可能です。実務では「ファイルがない」だけでなく、「保存先のフォルダがない」といったエラーも想定してコードを書くと、よりプロフェッショナルなツールに仕上がります。
