Excelマクロ(VBA)でファイル名一覧を取得する方法
※プーさんのレターセット by Panasonic GH5+12-60mm
「マクロでファイル名一覧を作りたい」
「ファイル読み込みしたいけど、ファイル名一覧が作れない」
「社員ファイル多すぎて手動でファイル一覧なんか作ってられない」
ファイル名一覧がないと、ファイル読み込みの自動化ができません。また、Excelファイル・txtファイル・CSVファイルの加工をするためにもファイル一覧が必要です。
しかし、ファイル一覧を手動で作るのは時間がかかりますし、入力ミスも考えられます。
そこで、マクロ(VBA)でファイル一覧を作ってしまえば手間が減り、入力ミスもありません。
今回は、マクロ(VBA)では基本となるファイル名一覧を取得する方法を紹介します。
取得したファイル名一覧は、セルに転記するのでその後は自由に使えますよ。
Excelマクロ(VBA)のDir関数でファイル名一覧を取得する
ファイル名一覧を取得するコードはこちらです。
1 Sub getFileNameList()
2 Dim str1 As String, str2 As String
3
4 ' フォルダを指定
5 str1 = "/Users/nekoru/Library/CloudStorage/Dropbox/0 Inbox/"
6 ' ファイル名取得
7 str2 = Dir(str1)
8 ' ファイル名転記場所の初期値
9 x = 2
10
11 Do While str2 <> "" 'ファイル名が見つからなくなるまでループ
12 ' ファイル名転記
13 ThisWorkbook.Worksheets("Sheet1").Cells(x, 1) = str2
14 x = x + 1
15
16 ' 次のファイル名を取得
17 str2 = Dir()
18 Loop
19End Sub
実行前がこちら
実行後がこちら
詳しく解説していきます。
ファイル名一覧を取得したいフォルダを指定
1' フォルダを指定
2 str1 = "/Users/nekoru/Library/CloudStorage/Dropbox/0 Inbox/"
フォルダを指定する際は、フルパスで指定しましょう。
フルパスで指定すると間違いが起こりにくいです。
上記は、Macの場合のフルパス表記となります。
Windowsの場合は、「”C:¥”excel」などのように表記が違うので気をつけてください。
フルパスがわからないときは、「フォルダを右クリック」→「プロパティ」から探してみましょう。
ファイル名を取得
1' ファイル名取得
2 str2 = Dir(str1)
ファイル名を取得するために、Dir関数を使います。
Dir関数の()内に、フォルダのパスを教えてあげるとファイル名がstr2に返ってくる仕組みです。
ファイル名は、いきなり全部教えてくれるのではなく1個ずつ教えてくれます。
ファイル名を転記するセルの場所
1' ファイル名転記場所の初期値
2 x = 2
ファイル名をセルに書き出す際の行数です。
1行目は、項目名になってることがあるので、2行目からファイル名を転記するようにしています。
ファイル名一覧を取得するループ
1Do While str2 <> "" 'ファイル名が見つからなくなるまでループ
2 ' 処理
3Loop
str2にファイル名が順番に入ってくるので、str2が空になったらループを終了するようにしています。
str2が空ということは、ファイルが無くなったということです。
ファイル名をセルに書き出す
1' ファイル名転記
2ThisWorkbook.Worksheets("Sheet1").Cells(x, 1) = str2
3x = x + 1
ファイル名をセルに書き出しています。
行方向に書き出していますが、逆もできます。
- .Cells(1, x) = str2
「x = x + 1」は、セルの場所を次にずらすためのものです。
次のファイル名を取得する
1' 次のファイル名を取得
2str2 = Dir()
Dir関数を使って、次のファイル名を取得しています。
このとき、Dir関数の()内は空欄でOKです。
Excelマクロ(VBA)のDo While~Loopは欠かせない
1Do While str2 <> "" 'ファイル名が見つからなくなるまでループ
2 ' 処理
3Loop
今回は、ファイル名一覧を作るマクロでしたが、Do While~Loop文が必要でした。
何年もマクロ(VBA)を使ってきていますが、Do While~Loopは本当に欠かせません。
For文ではダメなのか?という意見もあると思いますが、条件を設定できるので今回はDo While~Loopとなりました。
回数が決まっているもの・条件が不要なものにはFor文を使います。
今回のループ文では、「ファイル名が見つからなくなるまで」という条件でした。
ファイル名をすべて一気に取得できる場合には、このループ文は不要なのですが、マクロ(VBA)の場合はファイル名を1個ずつしか取り出せないのでこのような形となります。
今後のファイル名一覧を使ったマクロ(VBA)でも、Do While~Loopなどのループ文は必要になってくるので、ぜひ覚えておいてください。
Excelマクロ(VBA)に繰り返し処理は任せる
ファイル名一覧を作るなどのような、繰り返し処理はマクロ(VBA)に任せてしまいましょう。
繰り返し処理を任せると、
- 短時間で終わる
- ミス、ストレスが無くなる
- 空いた時間は別のことに使える
同じことの繰り返しは、ストレスがともなうもの。
ならば、機械に任せて違う仕事・遊びをしたほうが有意義に時間を過ごせます。
マクロ(VBA)を作る時間がかかると思う方も多いでしょう。
慣れてしまえば時間はかかりませんし、ChatGPTのようなAIに頼ってもいいと思います。
今回のマクロ(VBA)は10分もかからず作成できました。
ファイル数が100個など、大量にあった場合の手入力では10分では済まないですよね。
マクロ(VBA)初心者の方は難しいと感じるかもしれませんが、1個ずつ丁寧に解説していますのでゆっくり進んでいきましょう。
Excel VBAを勉強するなら「できる大辞典」がおすすめです。
辞書なのでピンポイントで学ぶことができます。大学時代、2016年版を購入して勉強していましたが相当使いました。
ネットだけでも勉強はできますが、本を読みながらVBAを勉強したい方は購入してください。