【ExcelVBA】Dir関数でファイルの存在をチェックする

ExcelVBA

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

サイト運営者
momo

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

momoをフォローする
003_midworks_img_300x250

Dir関数の考え方

Dir関数は、指定したファイルのファイル名を返します。

最初からファイル名分かっているのに、何でわざわざ調べるの?

と思うかもしれませんが、そうではありません。

ファイル名が返ってくるのは、そのファイルが確かにある(存在している)ときだけなのです。

ファイルがなければ””(空文字)しか返ってこないのです。

Dir関数は、
・値が返ってきたら⇒指定したファイルがあるということ
・””(長さ0の文字列)が返ってきたら⇒指定したファイルがないということ

この事を利用して、ファイルの存在チェックをします。

Dir関数は色々な使い方ができる関数ですが、

ファイルの存在チェックのときは、このように書きます。

Dir(ファイルパス,ファイル属性)

Dir関数:ファイル存在チェックの引数

引数1:ファイルパス

1つ目の引数は、ファイルパスです。

ファイル名がはっきり決まっている場合

例えば、Desktopフォルダ内の「一覧.xlsx」というファイルを調べたいときは、そのファイルパスを書きます。

“C:\Users\ユーザー名\Desktop¥一覧.xlsx

カレントディレクトリがそのファイルの場所になっている場合は、ファイル名だけでもいいのですが、そうでない場合はパスも含めてください。

※カレントディレクトリとは、今作業しているフォルダはここだよ、ということを示すものです。

この例でいうと、

「一覧.xlsx」ファイルが、カレントディレクトリ内にない場合
  ⇒パスを入れる(例:”C:\Users\ユーザー名\Desktop¥一覧.xlsx”)

 

「一覧.xlsx」ファイルが、カレントディレクトリ内にある場合
  ⇒ファイル名だけでOK(例:”一覧.xlsx”)
   パスを入れてもOK(例:”C:\Users\ユーザー名\Desktop¥一覧.xlsx”)

となります。

でも実際には、

あまり深く考えず、最初からパスを含めて書いておけばいいかと思います。

その方が、他の誰が読んでも理解しやすいというメリットがあります。

ファイル名がはっきり決まっていない場合

調べたいファイルが、さっきのように、はっきりと「一覧.xlsx」と言えず、

例えば「一覧」という言葉で始まるファイルがあるかチェックしたいときもあります。

その場合は、

“C:\Users\ユーザー名\Desktop¥一覧*

というふうに、ワイルドカード「*」を使います。

ワイルドカード「*」の意味は、その部分は、何文字でも・どんな文字でもOKという意味なので、

このように書けくことで、「一覧」で始まるファイルという意味になります。

引数2:ファイル属性

2つ目の引数は、必須ではありません。

1つ目の引数で指定したファイルに、さらに条件を追加したいときだけ使います。

例えば、「一覧」で始まるファイル名で、さらに読み取り専用のファイル、という条件を追加したいとき、

Dir(“C:\Users\ユーザー名\Desktop¥一覧*“,vbReadOnly)

という書き方をします。

「vbReadOnly」は実は「1」という番号を意味しています。

なので、「vbDirectory」の代わりに「1」と書いても大丈夫です。

でも「1」という番号を覚えておくのは大変なので、「1」を意味する定数「vbReadOnly」が用意されています。

「vbReadOnly」ぐらいなら、頭の片隅にでも、こんな定数だったなぁと覚えておけますよね。

実際にコーディングするときには、引数の候補が表示されるので、その中からそれを選べばいいだけです。

ちなみに、「vbReadOnly」は定数なので「”」(ダブルコーテーション)で囲む必要はありません。

「vbReadOnly」以外にも定数があるのですが、詳細はMicrosoftのページに載っています。ご参考まで。

Dir関数:ファイル存在チェックの戻り値

最初にお話しした通り、

Dir関数は、そのファイルが確かにある(存在している)ときはファイル名を、ファイルがないときは長さ0の文字列を返してきます。

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

If Dir(“C:\Users\ユーザー名\Desktop\一覧.xlsx”)=”” Then
  MsgBox “ファイルなし”
Else
      MsgBox “ファイルあり”
End If

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

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

上の例だと「一覧.xlsx」と返ってきます。

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

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

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