Home » FSO・FileSystemObjectの使い方 » FileSystemObjectでファイル名を配列に

動作検証バージョン:Windows版Excel(バージョン1810 ビルド11029.20079)+Microsoft Scripting Runtime

「vba ファイル名一覧を配列に filesystemobject」
という検索キーワードで、このサイト『インストラクターのネタ帳』へアクセスがありました。
FileSystemObjectを使って、いずれかのフォルダーに含まれるファイルの名前を、配列に格納したいということでしょう。

配列にする必要が、本当にあるのかはさておき、参考になりそうなマクロを作ってみました。

[スポンサードリンク]

以下のSubプロシージャはVBAの使える環境なら、ExcelやAccessだけでなく、PowerPointやWordでも動きます。

ファイル名を配列に格納するサンプルマクロ

以下のSubプロシージャを実行すると、C:\tempフォルダーに存在するファイルの名前が配列変数arrに格納されます。

Sub ファイル名を配列に()
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

End Sub

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

[スポンサードリンク]

Home » FSO・FileSystemObjectの使い方 » FileSystemObjectでファイル名を配列に

「FSO・FileSystemObjectの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.