ファイルのフルパスからファイルの存在確認(Excel VBA)
- yuji fukami
- 2024年12月29日
- 読了時間: 5分
更新日:5 日前
<概要>
今回はファイルのフルパスからファイルの存在を確認するExcel VBA用の汎用プロシージャの紹介です。
ファイルの存在確認に関しては、FileSystemObjectを利用すれば簡単に実装ができます。ただ、これにおいても毎回そのファイルの存在確認の実装にFileSystemObjectの参照を行ったり、もし存在しない場合の警告メッセージの表示などを記述するのは面倒くさくなってきます。
今回紹介する汎用プロシージャーでは存在を確認するファイルのフルパス「FilePath」およびファイルが存在しなかった場合に警告メッセージを表示するかどうかのON/OFF「Message」を引数で指定できるようになっております。
また、返り値でファイルが存在する場合はTrue存在しない場合はFalseが返ってきます。
このような処理が一行で済むようになります。
<実行例>
今回の処理は教科書によく載っている記述ですので、実行サンプルは割愛します。
<関連記事>
今回紹介しているような汎用プロシージャを部品として一元管理する方法は別記事で紹介していますので、是非このノウハウも参考にしてみてください。
コーディングを効率化する上でどんどん増やしていった汎用プロシージャ(部品)をいくら増やしても簡単に流用ができるような仕組みの構築が可能になります。
<コード>
<技術解説>
本記事では、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 ツール全体の品質・保守性・開発効率を確実に底上げしていきます。




コメント