トップページ >
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 では使用できません。
[作業用ブックを開く]戻る← | →進む[ファイルの一覧を取得する]