Dir関数 : 複数ファイルを名前順に処理する

フォルダー内の複数のファイルをファイル名順に連続で処理する定番のマクロです。ExcelでもWordでも使用できます。

Const pathUSER as String = "C:\@test"
Const strFind As String = "*.xlsx"
Dim nameFile As String

'1番目のファイルを探す
nameFile = Dir(pathUSER & "\" & strFind)
Do While nameFile <> ""
    '---------------------
    'ファイルの処理
    'ファイルパスは pathUser & "\" & nameFile
    '---------------------
    '次のファイルを探す
    nameFile = Dir()
Loop
"*.xlsx"

「拡張子が xlsx のファイルすべて」という指定です。* はファイル名を特定しないワイルドカードです。

3文字・4文字の拡張子の扱い
*.xls と指定すると、aaa.xls のほか bbb.xslxccc.xlsm も対象になります。*.doc に対して bbb.docx*.htm に対して bbb.html なども同様です。
Dir(ファイルのパス)Dir()

ファイルが見つかった場合はファイル名の文字列を返します。見つからなかった場合は ""(0文字テキスト)を返します。2回目以降ファイルのパスを指定しませんが、これで「前回のDirと同条件で探す」の意味になります。

Do ~ Loop で、ファイルが見つからなくなるまで(""が返されるまで)繰り返し行います。

Dir関数でファイル名順に取得されるのは、ファイルシステムがNTFSの場合です。FATの場合(最近はほとんど使われていないと思いますが)は更新日時順になります。
指定するファイルパスは、「\\サーバー名\フォルダー名\…」のようなネットワーク上のパスにも対応しています。「https://onedrive.live.com/フォルダー名/…」のようなURLには対応しません。

ファイルを取得するもう一つの定番にFileSystemObjectを使う方法があります。Dir関数とは次の違いがあります。

  • 外部オブジェクトの参照が必要なので少し面倒です(CreateObjectなど
  • フォルダーやファイルをオブジェクトとして取得でき、Dir関数より多くの情報を取り出せます
  • ファイル名順に取得はできません。別途ソートが必要になります

目的がファイルの有無の確認やファイルリストの取得なら、まずは手軽なDir関数がお勧めです。

タイトルとURLをコピーしました