ファイルの存在を確認する

2017/06/25

最も簡単な書き方としては、Dir関数を使う

Sub CheckFile()
    If Dir(Range("A1")) = "" Then
        Range("B1") = "ファイル取得失敗"
    End If

    If Dir(Range("A1")) <> "" Then
        Range("B1") = "ファイル取得成功"
    End If
End Sub

ただいくつか問題があって

  • 文字数の制限がある(256バイト以下)
  • ファイルに使えない文字(\ / : * ? " < > |)があるとエラー
  • ネットワーク上のパス(\123.456.789\とか)ではエラー

まれに何故だ!?ってなる。
自分で使う分にはいいけど、エラーの出ない堅固なコードにしたいならFileSystemObjectを使うのが無難

Sub CheckFile2()
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")

    If FSO.FileExists(Range("A1")) Then
        Range("B1") = "ファイル取得成功"
    Else
        Range("B1") = "ファイル取得失敗"
    End If
End Sub


ファイルの存在を調べる
http://officetanaka.net/excel/vba/file/file06.htm

Dir関数の制限について
http://excel-ubara.com/excelvba4/EXCEL262.html