フォルダ内のファイル名一覧を取得したいときは、Dir関数が便利です。
Dir関数の考え方
別のページで書きましたが、ファイルがあるか・ないか調べるときは、Dir関数が使えます。
Dir関数は、指定したファイルのファイル名を返すので、
つまり、
・指定したファイルがある場合⇒そのファイル名を返す
・指定したファイルがない場合⇒””(長さ0の文字列)を返す
と、言えます。
ではこれから、これを応用して、このページの本題である「フォルダ内のファイル一覧を取得する」を考えていきます。
Dir関数で、フォルダ内のファイル名一覧を取得する方法
ファイル名に「ワイルドカード(*)」を使う
例えば、デスクトップにある「一覧.xlsx」というファイルがあるか・ないか、調べたいときは、こう書きます。
Dir(“C:\Users\ユーザー名\Desktop¥一覧.xlsx”)
これを応用します。
Dir(“C:\Users\ユーザー名\Desktop¥*”)
「一覧.xlsx」を「*」(ワイルドカード)に変えました。
「*」は、その部分は”どんな文字でも”・”何文字でも”OK、という意味です。
つまり、
Desktopフォルダにある、どんな名前でも何文字の名前でも、どんなファイルでもいから取ってきてね、という意味になるのです。
まず1番目のファイルを取得する
では、Dir関数が取ってきたファイル名を、変数に入れてみます。
変数 = Dir(“C:\Users\ユーザー名\Desktop\*”)
ここで返ってくるファイル名は、Desktopフォルダ内の”最初”のファイル名です。
Dir関数で返ってくるファイルの順番
”最初”とあえて書いたのには、
”最初”の意味が、ファイルのあるディスク(CドライブとかDドライブとか)のファイルシステムによって違うからです。
詳しくはこの記事を見てください。
Windowsの場合は、ほぼ「ファイル名の昇順」に返ってくると覚えていて問題ないかと思います。
同じ条件で2番目のファイルを取得する
さて、”最初”の意味が少しややこしかったですが、
Desktopフォルダ内の1番目のファイルは、無事に取得することができました。
でも、今回のテーマは、”全てのファイル”を取得することです。
2番目、3番目、・・・そして、最後のファイルまで、全てのファイルを取得したいのです。
そこで、次にお話するのは、Dir関数のちょっと変わった使いかたです。
Dir()
ファイル名を書き忘れているわけではありません、これで正解なんです!
実は、()の中に何も書かない場合、直前に書いた()と同じ条件でファイルを探し、次に見つかったファイルを返してくれます。
具体例を見てみましょう。
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フォルダ内のファイルの数分、繰り返し処理をすることができます。
つまり、これでようやく、
今回のテーマ、”全てのファイル”を取得することができました!!