【ExcelVBA】Dir関数でフォルダの存在をチェックする方法

ExcelVBA

フォルダがあるかないかを確認するには、Dir関数が便利で簡単です。

サイト運営者
momo

知識ゼロから正社員→派遣→フリーランスになった関西出身の40代女ITエンジニア。エンジニアの世界を女性視点で本音で語ります。関西弁がちょっと強め。

momoをフォローする
003_midworks_img_300x250

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の文字列を返してきます。

戻り値によって処理を分けたいときは、このように書きます。

If Dir(“C:\Users\ユーザー名\Desktop\売上”,vbDirectory)=”” Then
  MsgBox “フォルダなし”
Else
      MsgBox “フォルダあり”
End If

フォルダのある・なしで、処理を分けることができました。

ちなみに、戻り値は「フォルダ名」のみです。パスは含まれません。

上の例だと「売上」と返ってきます。

戻り値の値を使って何かするときは、その点、気をつけてください。

既にフリーランスで今の案件に不満がある人も、今からフリーランスを目指す人も、エージェントを利用すれば年収600万も夢じゃありません。
難しい契約や交渉はエージェントにお任せ。1人で仕事を探すより、圧倒的に早く仕事が見つかります。
登録は無料で、その後の無料面談では自分の市場価値や将来性も確認できます。

ExcelVBA
momoをフォローする
タイトルとURLをコピーしました