wrote :: 2001.12.05

トップページ > Excel > VBA > 講座:ファイルの操作 > ファイルの存在を調べる


ファイルの存在を調べる

美しいマクロは「頑強性」を持っています。どんな環境でも、ユーザーがどれほど予想外の操作をしても、滅多なことでは停止しないマクロを目指しましょう。それには「○○のはず」という固定概念を払拭するのがポイントです。「ここにファイルがあるはず」「シート名はSheet1のはず」などなど、固定概念が多いマクロほど思わぬトラブルを招くものです。ここでは、操作しようとしたファイルが実は存在しなかったというトラブルを防ぐために、ファイルの存在を確認する方法を解説します。

もっとも簡単な方法のひとつはDIR 関数を使うことです。DIR 関数は引数に指定したファイルが存在する場合はファイル名を、存在しない場合は空白を返します。

Sub Sample19()
    If Dir("D:\Book1.xls") <> "" Then
        MsgBox "Book1 は存在します。", vbInformation
    Else
        MsgBox "Book1 は存在しません。", vbInformation
    End If
End Sub

DIR 関数の引数にはワイルドカードを使用できます。「Book1.xls」「Book2.xls」のように"Book"で始まるファイルが存在するかどうかを調べるには、次のようにファイル名をワイルドカードで指定します。

Sub Sample19_02()
    If Dir("D:\Book*.xls") <> "" Then
        MsgBox "Book は存在します。", vbInformation
    Else
        MsgBox "Book は存在しません。", vbInformation
    End If
End Sub

このとき DIR 関数の返り値は、条件に一致した最初のファイル名です。ワイルドカードを使うと、フォルダ内に存在するファイルの一覧を取得することができます。「フォルダ内のファイル一覧を取得する」を参照してください。

さて、DIR 関数の注意点は、返り値にはパスが含まれないということです。たとえば次のサンプルでは Book1.xls を見つけることができません。

Sub Sample19_03()
    Dim TargetFile As String
    TargetFile = "D:\Book1.xls"
    If Dir(TargetFile) = TargetFile Then
        MsgBox TargetFile & " は存在します。", vbInformation
    Else
        MsgBox TargetFile & " は存在しません。", vbInformation
    End If
End Sub

Dir(TargetFile) の返り値は「D:\Book1.xls」ではなく「Book1.xls」だからです。

ほかにも、FileSearch オブジェクトや FileSystemObject オブジェクトを使う方法などがあります。FileSearch オブジェクトでは、サブフォルダの中を検索して存在を確認できます。また、FileSystemObject オブジェクトを使えば、任意のフォルダが存在するかどうかを調べて、存在しない場合は新しくサブフォルダを作成することなどが簡単にできます。なお、FileSystemObject オブジェクトは Office 2000 で追加されたオブジェクトですから、Excel 97/95 では使用できません。


[作業用ブックを開く]戻る← | →進む[ファイルの一覧を取得する]