【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]Paste 2D Arrayresize once 【VBA】二次元配列をシートに貼り付け【範囲をリサイズする】 -
Let と Getで読み取り専用 【VBA】クラスのプロパティを読み取り専用にするLet と Getの書き方 -
[VBA]開いているブックからファイルを探す 【VBA】開いている全ブックから対象ブックをセット|InStr ファイル名の一部で判定 -
クラスでForEachを使いたい 【VBA】クラスで通常のCollection機能を利用する準備|ForEachが使えない -
時間計算のDateAdd 【VBA】DateAddで時間の足し算・引き算 -
CurrentRegionのデータを配列で取得 【VBA】シートにあるデータを配列に格納する(空白含まない)|CurrentRegion