VBのDir関数でファイルの一覧を得る myDir関数

VBのDir関数は、初めにワイルドカード*や?どちらも半角文字。 ワイルドカード*は、何の文字で何文字でもいいという意味。?は任意の一文字)を使ってファイルを検索し、続いて引数無しでDir関数を実行して、他に該当するファイルやフォルダ(ディレクトリ)がある場合は、その名前を返す。以下は、ドキュメントフォルダにa.xlsmとb.xlsmのファイルがあること前提にしている。

以下はイミディエイトウィンドウに入力している。

?vba.Curdir                       'カレントフォルダの確認
c:\users\take\documents       'takeはログインユーザ名
?vba.Dir("*.xls*")             'カレントフォルダにExcelのファイルがあるか
a.xlsm
?dir    '2回目のDir関数に引数が無い場合は、前のワイルドで検索を続ける
b.xlsm
?dir
       '””が返るともう見つからないという意味
vba.FileCopy  "c.xlsm","x.xlsm"     'コピーしてx.xlsmにする。
?dir("x.xlsm")           'ファイルがコピーされているか確認
x.xlsm
vba.Kill "x.xlsm"  'ワイルドカード禁止。ごみ箱には入らない
?dir("x.xlsm")
                            :削除済み

次のコードは標準モジュールに書く。ファイルの一覧を文字列で出力する関数。フルパスのファイル名を改行(vbCrLf)コードで挟んで文字列を返す関数。

'パスとファイル(ワイルドカード)を渡して一覧を改行コード区切りで文字列を返す
Function myDir(path As String, file As String) As String
    Dim s As String
    If VBA.Right(path, 1) <> "\" Then path = path & "\" '¥マークが最後に付いてない場合は¥を付ける
    s = VBA.Dir(path & file)
    Do Until "" = s '空白文字はもう該当のファイルが無いという意味
        If "" = myDir Then       '最初か
            myDir = path & s
        Else
            myDir = myDir & VBA.vbCrLf & path & s    'vbCrLfは改行の定数
        End If
        s = VBA.Dir()
    Loop
End Function
'?mydir(curdir,"*.xls*")

実行すると、拡張子がxlsを含むファイルを検索し、検索結果の文字列を改行コードで挟んで(区切り文字)にして表示する。

以下は、イミディエイトウィンドウ。

?mydir(vba.Curdir,"*.xls*")
C:\Users\take\Documents\a.xlsm
C:\Users\take\Documents\b.xlsm

プログラムで使う場合はar=Split(myDir(??,??),vbCrLf)で配列arに入れて処理する。

(Visited 540 times, 1 visits today)
カテゴリー: 13 ファイル処理、メモ帳とのデータ処理 パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です