「vba ファイル名一覧を配列に filesystemobject」
という検索キーワードで、このサイト『インストラクターのネタ帳』へアクセスがありました。
FileSystemObjectを使って、いずれかのフォルダーに含まれるファイルの名前を、配列に格納したいということでしょう。
配列にする必要が、本当にあるのかはさておき、参考になりそうなマクロを作ってみました。
以下のSubプロシージャはVBAの使える環境なら、ExcelやAccessだけでなく、PowerPointやWordでも動きます。
ファイル名を配列に格納するサンプルマクロ
以下のSubプロシージャを実行すると、C:\tempフォルダーに存在するファイルの名前が配列変数arrに格納されます。
On Error GoTo ErrHandl
Const PATH_ = "C:\temp"
With CreateObject("Scripting.FileSystemObject")
Dim coll_f As Object ' Scripting.Files: collection of File object
Set coll_f = .GetFolder(PATH_).Files
ReDim arr(1 To coll_f.Count) As String
Dim f As Object ' Scripting.File
Dim i As Long
For Each f In coll_f
i = i + 1
arr(i) = f.Name
Next f
End With
Stop
Exit Sub
ErrHandl:
Select Case Err.Number
Case 9
MsgBox PATH_ & " にはファイルが存在しません。"
Case 76
MsgBox PATH_ & " が存在しません。"
Case Else
MsgBox Err.Description & vbCrLf & Err.Number
End Select
Err.Clear
Stopステートメントで中断したら、拙著『いちばんやさしいExcel VBAの教本』でも多用しているローカルウィンドウを、メニュー[表示]-[ローカルウィンドウ]から表示して、配列arrの中身を確認してみてください。
サンプルマクロで行っている処理の流れ
FileSystemObjectオブジェクトのGetFolderメソッドの引数に、
定数PATH_を指定して、フォルダーを表すFolderオブジェクトを取得し、
With CreateObject("Scripting.FileSystemObject")
Dim coll_f As Object
Set coll_f = .GetFolder(PATH_).Files
FolderオブジェクトのFilesプロパティで取得した、
Filesコレクションへの参照をオブジェクト変数coll_fに代入しています。
With CreateObject("Scripting.FileSystemObject")
Dim coll_f As Object
Set coll_f = .GetFolder(PATH_).Files
String型の配列変数を準備して、
ReDim arr(1 To coll_f.Count) As String
Filesコレクションに対してFor Each~Nextループを回し、
Dim f As Object ' Scripting.File
Dim i As Long
For Each f In coll_f
ファイル名を順次格納しています。
i = i + 1
arr(i) = f.Name
Next f
本当に配列にする必要がありますか?
「vba ファイル名一覧を配列に filesystemobject」
ということですから、配列に格納するSubプロシージャをご紹介しましたけれど、本当に配列にする必要があるのかは、考えてみてください。
このあと一括処理を行うために配列に格納したのなら意味はありますが、Filesコレクションに対するループ処理でもOKな可能性もあると考えています。
上記のSubプロシージャがStopステートメントで中断した状態で、オブジェクト変数coll_fの中身を、ローカルウィンドウで覗いてみましょう。
オブジェクト変数coll_fのItem〇が、各Fileオブジェクトで、Fileオブジェクトからも当然ファイル名は取得できます。
最終更新日時:2018-12-28 14:16
- Newer:参照設定したのにFieldが自動メンバー表示されない
- Older:スライドマスター表示にするPowerPointマクロ
Home » FSO・FileSystemObjectの使い方 » FileSystemObjectでファイル名を配列に