【VBA】フォルダとファイルの存在確認|FSOよりもDir
作成日:2022-12-02
更新日:2025-10-06

ブック操作の前に
まず存在確認
まず存在確認
存在すればTrueを返す
フォルダの存在確認
Public Function FolderExists(ByVal folderPath As String) As Boolean
FolderExists = (Dir(folderPath, vbDirectory) <> "")
End Functionブックの存在確認
Public Function FileExists(ByVal fullPath As String) As Boolean
FileExists = (Dir(fullPath, vbNormal) <> "")
End Function仕組み
- Dir(path, vbDirectory)
→ フォルダやファイルが存在すると、その名前を文字列で返す。
→ 存在しない場合は、空文字(””)を返す。

「空文字(””)ではない」がTrueなら
存在している
Dirをもっと詳しく
Windowsのファイルシステムを調べて、条件に合うファイル/フォルダの名前を返す関数。
存在しなければ空文字列 "" を返す。
使い方
- 構文
- Dir[(pathname, [attributes])]
- 引数
pathname (パス名)- 調べたいファイルやフォルダのフルパス(例: “C:\Test\book.xlsx”)
attributes (属性)- 検索対象を指定(例:
vbNormal,vbDirectory,vbHiddenなど)
- 検索対象を指定(例:
- 挙動
- 存在する場合 → ファイル名を返す
- 存在しない場合 → 空文字列
""を返す

存在確認ならFSOよりもDir
Dir と FSO(FileSystemObject)の比較
Dir が存在確認に向く理由
Dir のほうが速い・軽い・依存が少ない
パフォーマンス(速度)
Dir:ネイティブAPIを直接叩くから速いFSO:COM オブジェクト経由- 毎回オブジェクト生成 → メソッド呼び出し → 解放 のオーバーヘッドがかかる
依存関係が少ない
Dir:標準モジュールだけで動くFSO:「Microsoft Scripting Runtime」への参照(またはCreateObject)が必要
用途の適合性
Dir:「ファイルが存在するかどうか」だけなら十分FSO:ファイルサイズ・日付・拡張子・フォルダ構造などリッチな情報が欲しい時に使う
比較の結論
If all you need is existence check, stick with Dir. Use FSO only when you truly need richer file metadata.
存在確認だけなら Dir、詳細情報が欲しい時だけFSO。
出典
- Microsoft Docs. (n.d.). Dir function.

同じ処理をPythonでも書いてみよう
2022-12-02
編集後記:
この記事の内容がベストではないかもしれません。
記事一覧
-

[VBA]Reset filtersand outlines 【VBA】オートフィルタ解除&非表示を表示する|.FilterMode/.Outline -

[VBA]ShowMessage Box 【VBA】メッセージボックスをモジュールに集める|OKOnly,OKCancel,YesNo -

vbaの色設定 【VBA】色の定数は8つ|RGB対称表 -

[VBA]Cells or Range 【VBA】.Cells と .Range の使い分け目安|数千か数万か -

グラフ設定を変更する 【VBA】グラフ設定を動的に変更する -

[VBA]Cutbefore after 【VBA】文字列から指定文字より前/後ろをカットする|InStrRev/Left$/Mid$