命令 「フォルダ内にあるエクセルファイルの一覧表を作成せよ」
応用テクニック Do ~ Loop と Dir関数を使った事例です。
今までと同じですが
Sub ボタン2_Click()
i = 2
Buf = Dir(ThisWorkbook.Path & "\*.xlsx")
Do While Buf <> ""
Range("B" & i).Value = Buf
i = i + 1
Buf = Dir()
Loop
End Sub
i = 2
Buf = Dir(ThisWorkbook.Path & "\*.xlsx")
Do While Buf <> ""
Range("B" & i).Value = Buf
i = i + 1
Buf = Dir()
Loop
End Sub
のコードを作成したファイルを、
適当(マイドキュメントにでも)にマクロ有効ブック(xlsm)で保存して
マクロ実行してみて下さい。
B列に、このブックを保存したフォルダ内にあるエクセルのファイル名の一覧が出来ます。
Dir関数ですが、フォルダを指定して、そのフォルダ内のファイル名を取得できます。
しかし、フォルダには、多数のファイルが存在します。
なので
Buf = Dir(ThisWorkbook.Path & "\*.xlsx")
Buf = Dir(ThisWorkbook.Path & "\*.xlsx")
Bufは変数です。何で構いません(Buf はバッファーの意味でよく使われます)
(ThisWorkbook.Path & "\*.xlsx")は、マクロを記述したファイルを保存しているフォルダの
*.xlsx でエクセルファイル を指定しています。
これで、フォルダ内のエクセルファイルの一つが Buf に入ります。
次に Do While 条件 ~Loop です。
Do While Buf <> "" :Bufが空白になるまでLoop間を繰り返しなさい。
Range("B" & i).Value = Buf :B列にBufを書きだす(ファイル名が入る)
i = i + 1 :B列の行番号を増やしておく。
Buf = Dir() :ここがみそで、次のファイル探しに行きます。
Range("B" & i).Value = Buf :B列にBufを書きだす(ファイル名が入る)
i = i + 1 :B列の行番号を増やしておく。
Buf = Dir() :ここがみそで、次のファイル探しに行きます。
:全てのファイルを探し当てたら、最後Bufは空白になります。
Loop :なので、全てのファイルを探したらDo While Buf <> "" で終了
Loop :なので、全てのファイルを探したらDo While Buf <> "" で終了
Dir() 次を検索すると云う使い方で複数のファイル名を探し出します。
エクセルVBAユーザーでも Dir関数を知っている人は少ないと思います。
仕事(事務職)では、必須ですので、覚えておくと良いですね。
最後の、Dir関数を使った実際に役に立つ、問題を投稿しますのでお楽しみに!!