【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
編集後記:
この記事の内容がベストではないかもしれません。
記事一覧
-

Excelでメール作成とOutlook起動 【VBA】Excelでメール内容を作成してOutlookを起動する -

[VBA]StrCompで文字列比較 【VBA】拡張子の存在確認|Right + StrComp -

シート名でシート取得 【VBA】シートをシート名で取得する|Worksheets(name) -

dictionaryをセットする 【VBA】Dictionaryのセット|CreateObject(“Scripting.Dictionary”) -

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

[VBA]Auto DiffHTML Output 【VBA】WinMergeでファイルを自動比較&HTMLレポート出力|AIより手軽