【ExcelVBA】Dir関数でファイル名一覧を取得する

ExcelVBA

フォルダ内のファイル名一覧を取得したいときは、Dir関数が便利です。

サイト運営者
momo

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

momoをフォローする
003_midworks_img_300x250

Dir関数の考え方

別のページで書きましたが、ファイルがあるか・ないか調べるときは、Dir関数が使えます。

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

つまり、

Dir関数は、
・指定したファイルがある場合⇒そのファイル名を返す
・指定したファイルがない場合⇒””(長さ0の文字列)を返す

と、言えます。

ではこれから、これを応用して、このページの本題である「フォルダ内のファイル一覧を取得する」を考えていきます。

Dir関数で、フォルダ内のファイル名一覧を取得する方法

ファイル名に「ワイルドカード(*)」を使う

例えば、デスクトップにある「一覧.xlsx」というファイルがあるか・ないか、調べたいときは、こう書きます。

Dir(“C:\Users\ユーザー名\Desktop¥一覧.xlsx”)

これを応用します。

Dir(“C:\Users\ユーザー名\Desktop¥*”)

「一覧.xlsx」を「*」(ワイルドカード)に変えました。

「*」は、その部分は”どんな文字でも”・”何文字でも”OK、という意味です。

つまり、

Desktopフォルダにある、どんな名前でも何文字の名前でも、どんなファイルでもいから取ってきてね、という意味になるのです。

まず1番目のファイルを取得する

では、Dir関数が取ってきたファイル名を、変数に入れてみます。

Dim 変数 As String
変数 = Dir(“C:\Users\ユーザー名\Desktop\*”)

ここで返ってくるファイル名は、Desktopフォルダ内の”最初”のファイル名です。

Dir関数で返ってくるファイルの順番

”最初”とあえて書いたのには、

”最初”の意味が、ファイルのあるディスク(CドライブとかDドライブとか)のファイルシステムによって違うからです。

詳しくはこの記事を見てください。

Windowsの場合は、ほぼ「ファイル名の昇順」に返ってくると覚えていて問題ないかと思います。

同じ条件で2番目のファイルを取得する

さて、”最初”の意味が少しややこしかったですが、

Desktopフォルダ内の1番目のファイルは、無事に取得することができました。

でも、今回のテーマは、”全てのファイル”を取得することです。

2番目、3番目、・・・そして、最後のファイルまで、全てのファイルを取得したいのです。

そこで、次にお話するのは、Dir関数のちょっと変わった使いかたです。

Dir()

ファイル名を書き忘れているわけではありません、これで正解なんです!

実は、()の中に何も書かない場合、直前に書いた()と同じ条件でファイルを探し、次に見つかったファイルを返してくれます。

具体例を見てみましょう。

Dim 変数1 As String
Dim 変数2 As String
変数1 = Dir(“C:\Users\ユーザー名\Desktop\*”)
変数2 = Dir()

”変数2 = Dir()”は、”変数2 = Dir(“C:\Users\ユーザー名\Desktop\*”)” と、同じ意味です。

つまり、変数1には、Desktopフォルダの1番目のファイル名が、そして、変数2には、Desktopフォルダの2番目のファイル名が入ります。

同じ条件で3番目以降のファイルも取得する

これで、Desktopフォルダ内のファイルのうち、1番目も2番目も、無事に取得することができました。

でも、今回のテーマは、”全てのファイル”を取得することです。

しつこいですが、

3番目、4番目、・・・そして、最後のファイルまで、全てのファイルを取得したい・・・のです。

ファイルの数だけ変数を作って、ファイルの数だけDir()を繰り返す??

ファイルの数を先に調べないといけない??

それは面倒なので、こんな風に書いてみるとどうでしょうか。

Dim 変数 As String

変数 = Dir(“C:\Users\ユーザー名\Desktop\*”)

Do While 変数 <> “”
  ‘ここに、やりたい処理を書く

  ‘次のファイル名を取得する
  変数= Dir()
Loop

変数= Dir()によって、Desktopフォルダ内にファイルがある限り、変数にはファイル名が入ります。

そして、「Do While 変数 <> “”」 の、「変数 <> “”」は、変数にファイル名が入る限り繰り返す、という意味なので、

Desktopフォルダ内のファイルの数分、繰り返し処理をすることができます。

つまり、これでようやく、

今回のテーマ、”全てのファイル”を取得することができました!!

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

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