Home » エクセルマクロ・Excel VBAの使い方 » 配列 » Dir関数でファイル名を配列に

Dir関数でファイル名を配列に

動作検証バージョン:Windows版Excel(バージョン1811 ビルド11029.20108)

FileSystemObjectを使ってファイル名を配列に格納するSubプロシージャをご紹介しました。

FileSystemObjectを使うなら、配列にしなくてもFilesコレクションを使えば済むのではないかという気もしますが、VBAのDir関数を使ってファイル名を配列に格納するのは意味がありそうです。

[スポンサードリンク]

Dir関数でファイル名を配列に格納するサンンプルマクロ

以下のSubプロシージャを実行すると、C:\tempフォルダーに存在するファイルの名前が配列変数arrに格納されます。

Sub Dir関数でファイル名を配列に()
 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

End Sub

Stopステートメントで中断したら、拙著『いちばんやさしいExcel VBAの教本』でもよく利用しているローカルウィンドウを、メニュー[表示]-[ローカルウィンドウ]から表示し、配列arrの中身を確認してみてください。

Dir関数でファイル名を配列に

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

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » 配列 » Dir関数でファイル名を配列に

「配列」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.