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)