FileSystemObjectを使ってファイル名を配列に格納するSubプロシージャをご紹介しました。
FileSystemObjectを使うなら、配列にしなくてもFilesコレクションを使えば済むのではないかという気もしますが、VBAのDir関数を使ってファイル名を配列に格納するのは意味がありそうです。
Dir関数でファイル名を配列に格納するサンンプルマクロ
以下のSubプロシージャを実行すると、C:\tempフォルダーに存在するファイルの名前が配列変数arrに格納されます。
Const PATH_ = "C:\temp"
Dim f_name As String
f_name = Dir(PATH_ & "\*")
If f_name = "" Then
MsgBox PATH_ & "にはファイルがありません。"
Exit Sub
End If
Dim arr() As String
Dim i As Long
Do
i = i + 1
ReDim Preserve arr(1 To i)
arr(i) = f_name
f_name = Dir
Loop While f_name <> ""
Stop
Stopステートメントで中断したら、拙著『いちばんやさしいExcel VBAの教本』でもよく利用しているローカルウィンドウを、メニュー[表示]-[ローカルウィンドウ]から表示し、配列arrの中身を確認してみてください。
Dir関数を使ったサンプルマクロの処理
Dir関数は引数に指定された条件に一致する最初のファイル名を返します。
なにもみつからない場合は、空白文字列を返しますので、メッセージを表示して終了します。
f_name = Dir(PATH_ & "\*")
If f_name = "" Then
MsgBox PATH_ & "にはファイルがありません。"
Exit Sub
ファイルが存在していた場合は、配列変数arrの1つ目の要素として格納します。
Dim arr() As String
Dim i As Long
Do
i = i + 1
ReDim Preserve arr(1 To i)
arr(i) = f_name
Dir関数は、引数を指定せずに呼ばれると、前の指定条件のまま次のファイルを探し、みつからなくなると空白文字列を返しますから、以下のような指定を行っています。
f_name = Dir
Loop While f_name <> ""
Dir関数に慣れていない方はじっくりステップ実行を
Dir関数に慣れていない方は、ショートカットキー[F8]でステップ実行して、1回目にDir関数を呼んでいる、
f_name = Dir(PATH_ & "\*")
の直後の変数f_nameの中身をローカルウィンドウで確認しましょう。
つづいてDo~Loop文の中でDir関数が呼ばれたときの
Do
f_name = Dir
Loop While f_name <> ""
変数f_nameの中身をローカルウィンドウで目視確認しながら、[F8]キーでじっくりとループ処理を実行してみてください。
最終更新日時:2018-12-28 14:27
- Newer:_NewEnumはADOでも表示されない
- Older:VBAにはWhile~Wendというループ文もある
Home » エクセルマクロ・Excel VBAの使い方 » 配列 » Dir関数でファイル名を配列に