銀河鉄道

【VBA】フォルダとファイルの存在確認|FSOよりもDir

サムネイル
[VBA]Dirで存在確認
ブック操作の前に
まず存在確認

存在すれば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。

出典

同じ処理をPythonでも書いてみよう

著者

author
月うさぎ

編集後記:
この記事の内容がベストではないかもしれません。

記事一覧