FileExists|ファイル存在確認を行う関数 | Excel VBA
- yuji fukami
- 2024年12月29日
- 読了時間: 5分
更新日:1月4日

<概要 (VBA ファイル 存在)>
FileExists は、指定したファイルパスに対してそのファイルが存在するかどうかを判定するためのExcel VBA 用の汎用プロシージャです(VBA ファイル 存在)。
処理結果は Boolean 型(True / False)で返されるため、If 文などの条件分岐にそのまま利用できます。
また、オプション引数を指定することで、ファイルが存在しなかった場合にユーザーへ警告メッセージを表示することも可能です。
ファイル入出力処理や、外部ファイルを参照する前段階のチェック処理として非常に使用頻度の高いプロシージャです。
<実行例>
実行すると、指定したファイルパスに対象のファイルが存在するかどうかが判定されます。
ファイルが存在する場合は True が返され、サンプルでは「ファイルは存在します」という
メッセージが表示されます。
ファイルが存在しない場合は False が返され、オプション引数を True にしているため、
不足しているフォルダパスとファイル名を示した警告メッセージが表示されます。
この戻り値を利用することで、ファイルを開く前の安全確認や、処理を分岐させる制御が簡単に実装できます。
<関連記事>
今回紹介しているような汎用プロシージャを部品として一元管理する方法は別記事で紹介していますので、是非このノウハウも参考にしてみてください。
コーディングを効率化する上でどんどん増やしていった汎用プロシージャ(部品)をいくら増やしても簡単に流用ができるような仕組みの構築が可能になります。
<コード>
<技術解説>
本記事では、Excel VBA においてファイルのフルパスを指定して存在確認を行う汎用プロシージャFileExists を技術的観点から解説します。
FileExistsは単なるファイルの存在確認に留まらず、
業務環境での安定性
再利用性
保守性
環境差への耐性
を意識した設計思想を含めて紹介しています。
なお、本記事の技術解説文は ChatGPT による下書きをベースに、著者自身が実装内容の確認・技術的妥当性の査読を行ったうえで公開しています。
なぜ Function プロシージャなのか
FileExists プロシージャの概要
本プロシージャは、指定されたファイルパスに対して
ファイルが存在する → True
ファイルが存在しない → False
を返す Function プロシージャです。
さらに、オプション引数により 存在しない場合のみ警告メッセージを表示するかどうかを ON / OFF で制御できます。
なぜ Function プロシージャなのか
Sub ではなく Function として定義することで、
判定結果を戻り値として扱える
If 文の条件式に直接使用できる
というメリットがあります。
If FileExists(FilePath) = False Then Exit Sub
このように記述することで、**後続処理の前提条件チェック(ガード処理)**として自然に組み込めます。
Optional 引数によるメッセージ制御の意図
Optional ByRef Message As Boolean = False
この引数により、
自動処理・バッチ処理 → メッセージ非表示
手動操作・デバッグ → メッセージ表示
といった 用途別の使い分けが可能になります。
同じ処理を「処理用」「ユーザー操作用」両方で流用できる点が、汎用プロシージャとしての大きな利点です。
FileSystemObject(FSO)を採用している理由
ファイル存在確認には Dir 関数も使用できますが、本プロシージャでは FileSystemObject(FSO)を採用しています。
理由は以下のとおりです。
Dir 関数を使用しない理由
Dir 関数は簡潔ですが、業務用途では注意点があります。
社内ネットワーク(UNC パス)
ファイルサーバー
NAS 環境
といった ネットワーク上のフォルダでは、
アクセス権限
接続状態
同時アクセス
の影響を受けやすく、意図しない判定結果になるケースがあります。
また、Dir 関数は内部的に状態を持つため、
汎用関数
共通部品
大規模マクロ
では 他処理の影響を受けるリスクもあります。
FileSystemObject の利点
FileSystemObject を使用することで、以下のメリットが得られます。
ネットワーク環境でも安定して動作
ローカル/サーバーを意識せず同一ロジックで処理可能
ファイル名・パス操作を一元管理できる
可読性・保守性が高い
FSO.FileExists(FilePath)
という記述は、処理意図が明確で読みやすい点も業務用途では重要です。
ファイル名・フォルダパスを分離して表示する理由
本プロシージャでは、ファイルが存在しない場合に
フォルダパス
ファイル名
を分けてメッセージ表示しています。
これにより、
パス指定ミス
フォルダ選択ミス
ファイル名の入力ミス
をユーザーが即座に判断でき、業務上の問い合わせ・確認コストを減らす効果があります。
戻り値を一度変数に格納している理由
判定結果を直接返さず、一度 Output 変数に格納してから返しています。
これは、
処理の流れを追いやすい
デバッグが容易
将来の拡張(ログ追加等)に対応しやすい
といった 保守性を意識した書き方です。
実務での利用シーン
この FileExists プロシージャは、以下のような場面で活用できます。
CSV / PDF / 画像ファイルの取込前チェック
外部ブック参照前の安全確認
ユーザー指定パスの入力検証
バッチ処理中の例外防止
必ず通す前処理として組み込める部品にしておくことで、ツール全体の安定性が大きく向上します。
まとめ
本記事で紹介した FileExists は、非常に小さな処理ですが、
環境差に強い
再利用しやすい
拡張しやすい
という設計を意識することで、業務で長く使える汎用プロシージャになります。
このような部品を少しずつ蓄積していくことが、VBA ツール全体の品質・保守性・開発効率を確実に底上げしていきます。



