フォルダがあるかないかを確認するには、Dir関数が便利で簡単です。
Dir関数の考え方
Dir関数は、指定したフォルダのフォルダ名を返します。
最初からフォルダ名分かっているのに、何でわざわざ調べるの?
と思うかもしれませんが、そうではありません。
フォルダ名が返ってくるのは、そのフォルダが確かにある(存在している)ときだけなのです。
フォルダがなければ””(空文字)しか返ってこないのです。
・値が返ってきたら⇒フォルダがあるということ
・””(長さ0の文字列)が返ってきたら⇒フォルダがないということ
この事を利用して、フォルダの存在チェックをします。
Dir関数は色々な使い方ができる関数ですが、
フォルダの存在チェックのときは、このように書きます。
Dir(フォルダパス,フォルダを探して欲しいことを示す番号)
Dir関数:フォルダ存在チェックの引数
引数1:フォルダパス
1つ目の引数は、フォルダのパスです。
フォルダ名がはっきり決まっている場合
具体的に、例えば、Desktopに「売上」というフォルダがあるか・ないか、調べたいときは、こう書きます。
“C:\Users\ユーザー名\Desktop¥売上”
カレントディレクトリがそのフォルダの場所になっている場合は、フォルダ名だけでいいのですが、そうでない場合はパスも含めてください。
※カレントディレクトリとは、今作業しているフォルダはここだよ、ということを示すものです。
この例でいうと、
⇒パスも入れる(例:”C:\Users\ユーザー名\Desktop¥売上”)
「売上」フォルダが、カレントディレクトリ内にある場合
⇒フォルダ名だけでOK(例:”売上”)
パスを入れてもOK(例:”C:\Users\ユーザー名\Desktop¥売上”)
となります。
でも実際には、あまり深く考えず、最初からパスを含めて書いておけばいいかと思います。
その方が、他の誰が読んでも理解しやすいというメリットがあります。
フォルダ名がはっきり決まっていない場合
調べたいフォルダ名が、さっきのように、はっきりと「売上」と言えず、
例えば「売上」という言葉で始まるフォルダがあるかチェックしたいときもあります。
その場合は、
“C:\Users\ユーザー名\Desktop¥売上*“
というふうに、ワイルドカード「*」を使います。
ワイルドカード「*」の意味は、その部分は、何文字でも・どんな文字でもOKという意味なので、
このように書けくことで、「売上」で始まるフォルダという意味になります。
引数2:フォルダを探して欲しいことを示す番号
2つ目の引数「vbDirectory」は、
「ファイルではなくフォルダを取得して欲しいです」という意味になります。
Dir(“C:\Users\ユーザー名\Desktop¥売上”,vbDirectory)
これを省略してしまうと、フォルダではなく「売上」という名前のファイルを探されてしまいます。
なので、フォルダを探したいときは「vbDirectory」と書いてください。
「vbDirectory」は実は「16」という番号を意味しています。
なので、「vbDirectory」の代わりに「16」と書いても大丈夫です。
でも「16」という番号を覚えておくのは大変なので、「16」を意味する定数「vbDirectory」が用意されています。
「vbDirectory」ぐらいなら、頭の片隅にでも、こんな定数だったなぁと覚えておけますよね。
実際にコーディングするときには、引数の候補が表示されるので、その中からそれを選べばいいだけです。
ちなみに、「vbDirectory」は定数なので「”」(ダブルコーテーション)で囲む必要はありません。
Dir関数:フォルダ存在チェックの戻り値
最初にお話しした通り、
Dir関数は、そのフォルダが確かにある(存在している)ときはフォルダ名を、フォルダがないときは長さ0の文字列を返してきます。
戻り値によって処理を分けたいときは、このように書きます。
MsgBox “フォルダなし”
Else
MsgBox “フォルダあり”
End If
フォルダのある・なしで、処理を分けることができました。
ちなみに、戻り値は「フォルダ名」のみです。パスは含まれません。
上の例だと「売上」と返ってきます。
戻り値の値を使って何かするときは、その点、気をつけてください。