wrote :: 2001.12.05

トップページ > Excel > VBA > 講座:ファイルの操作 > ファイルの一覧を取得する


ファイルの一覧を取得する

「ファイルが存在しているかどうかを確認する」で DIR 関数を使ったサンプルをご紹介しました。たとえば次のようなプロシージャです。

Sub Sample19()
    If Dir("D:\Book1.xls") <> "" Then
        MsgBox "Book1 は存在します。", vbInformation
    Else
        MsgBox "Book1 は存在しません。", vbInformation
    End If
End Sub

DIR 関数の引数にはワイルドカードを指定できます。Dir("D:\*.*") と書けば「D:\に存在する任意のファイル」という意味になります。ここで DIR 関数が返すのは、D:\ に存在する最初のファイルです。さらに、DIR 関数にはもうひとつ特徴があります。引数を省略すると「前回指定された引数が、今回も指定されたものとする」という特徴です。さらに、新しい引数が指定されない限り、一度返したファイル名は二度と返しません。これらの特徴を利用すれば、次のようにして任意のフォルダ内に存在するすべてのファイル名を取得することができます。ここでは、Sheet1 のセル A1 から下方向にファイル名を代入するサンプルをご紹介します。

Sub Sample20()
    Dim buf As String, i As Long
    buf = Dir("D:\*.*")
    Do While buf <> ""
        i = i + 1
        Worksheets("Sheet1").Cells(i, 1) = buf
        buf = Dir()
    Loop
End Sub

では、D:\ に「Book1.xls」「Book2.xls」「Book3.xls」の 3 つが保存されていたとしましょう。上記の Sample20 を実行すると、どの順番でファイル名を取得できるのでしょう?

実は公式なルールを見たことがありません。「Book1.xls」「Book2.xls」「Book3.xls」とファイル名がソートされて取り出されることはありません。DIR 関数にそんな機能はないからです。一般的には「保存した順番」で取り出されることが多いようです。おそらく FAT に書き込まれている順番ではないかと思います。この件に関して、明確なルールと根拠をご存じの方がいらしたら、ぜひ教えてください。


[ファイルの存在を調べる]戻る← | →進む[テキストファイルを操作する]