こんにちは!ぐーです。
いつもブログをご覧いただき、ありがとうございます!
マクロを実行した瞬間に「実行時エラー ‘1004’: ‘(ファイル名)’ が見つかりません」 というエラー画面が出て、パニックになったことはありませんか?
私自身、あのエラー画面が表示されると一瞬ドキッとしてしまいます。
特に、自作のツールを他人に使ってもらっている最中にこのエラーが出ると、なんとも言えない気まずい空気が流れて辛いものですよね。
この記事では、そんな事故を未然に防ぎ、エラー画面をシャットアウトする「防波堤」のようなコードを解説します。
手軽な「Dir関数」と、実務で重宝される「FileSystemObject(FSO)」の2パターンを用意しました。
なぜ「ファイル存在確認」の一手間が必要なのか?
例えば、「売上データ.xlsx」を開いて集計するマクロを作成したとしましょう。
しかし、もし誰かがそのファイルを「売上データ_2025.xlsx」に名前を変えていたり、別のフォルダに移動させていたらどうなるでしょうか?
事前の確認なしにファイルを開こうとすると、Excelは「指定されたファイルがない!」と判断し、マクロをその場で強制終了させてしまいます。
これを防ぐには、開く命令を出す直前に「そこにファイルはありますか?」と確認するステップを挟むのが定石です。
方法①:コピペで即解決!基本の「Dir関数」
まずは、特別な設定が不要で最も手軽に使える「Dir(ディレクトリ)関数」を使った手法です。
わずか数行の追加で導入できるため、まずはこの方法から試してみてください。
コード(標準モジュールにコピペOK)
Sub ファイル存在確認をしてから開く_Dir版()
' 1. 開きたいファイルの場所を指定
Dim targetPath As String
targetPath = "C:\Users\User\Desktop\売上データ.xlsx"
' 2. ファイルがあるかチェックする
' Dir関数は、ファイルが存在すればその名前を、なければ空文字("")を返します
If Dir(targetPath) <> "" Then
' ファイルがある場合の処理
Workbooks.Open targetPath
MsgBox "無事にファイルを開きました!", vbInformation
Else
' ファイルがない場合の処理
' エラー画面を出さずに、メッセージを出して終了
MsgBox "指定されたファイルが見つかりませんでした。" & vbCrLf & _
"場所や名前が変わっていないか確認してください。" & vbCrLf & _
"探した場所:" & targetPath, vbExclamation
End If
End Sub
解説
ここで使っているのは、VBAに標準搭載されている「Dir関数」です。
PCに対して、「指定の場所にファイルはある? あれば名前を、なければ空文字(””)を返して」と指示を出しているイメージだと考えると分かりやすいでしょう。
方法②:より確実で高機能!「FileSystemObject (FSO)」
「将来的にはファイルの移動や削除、フォルダ作成なども自動化したい」という方には、この「FileSystemObject(通称FSO)」が最適です。
Dir関数よりも挙動が安定しており、複雑なファイル操作に特化した強力なツールです。
コード(FSO版)
Sub ファイル存在確認をしてから開く_FSO版()
Dim targetPath As String
targetPath = "C:\Users\User\Desktop\売上データ.xlsx"
' ファイルシステムオブジェクトの準備
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
' FileExistsメソッドでチェック
If fso.FileExists(targetPath) = True Then
Workbooks.Open targetPath
MsgBox "FSOを使ってファイルを開きました!", vbInformation
Else
MsgBox "ファイルが見つかりません。" & vbCrLf & _
"パス:" & targetPath, vbExclamation
End If
' 後片付け
Set fso = Nothing
End Sub
結局、どちらを使うべき?状況別の使い分けガイド
「結局、どっちを使えばいいの?」と迷ったときは、以下の基準で選べば間違いありません。
| 手法 | メリット | おすすめのシーン |
| Dir関数 | コードが短く、準備がいらない。 | とりあえずサクッと存在確認したい時。 |
| FSO | 作成日やサイズの取得など、多機能。 | 本格的なツール作成や大量のファイル操作時。 |
現場で「ちょっとファイルを安全に開きたい」という場面なら、まずはDir関数で十分です。まずは扱いやすい方法をマスターして、エラーに強いコードを書ける自信をつけていきましょう!
まとめ
今回のポイントをおさらいします。
- エラーは「準備不足」なだけ。コードを開く前に存在確認を挟もう。
- 手軽なDir関数、確実なFSO、好きな方を使ってOK。
- エラーメッセージを日本語にしてあげるだけで、使う人は安心する。
不測の事態に備えるコードを書いて、脱・初心者を目指しましょう!
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

コメント