Home » FSO・FileSystemObjectの使い方 » ファイル名一覧を作成するExcelマクロ-File.Nameプロパティ

ファイル名一覧を作成するExcelマクロ-File.Nameプロパティ

対象:Excel2007, Excel2010, Excel2013

VBAのDir関数を使って、指定したフォルダのファイル名一覧を作成するExcelマクロをご紹介しました。

FileSystemObjectを使った、ファイル名一覧作成マクロもご紹介しておきましょう。

[スポンサードリンク]

ファイル名一覧を作成するサンプルマクロ

FileSystemObjectを利用する場合は以下のようなマクロです。

Sub フォルダを指定してファイル名一覧を作成する_FSO()
 Dim dlg   As FileDialog
 Dim fd_path As String
 Dim fso   As Object 'Scripting.FileSystemObject
 Dim fl   As Object 'Scripting.File
 Dim i    As Long

 Set dlg = Application.FileDialog(msoFileDialogFolderPicker)
 If dlg.Show = False Then Exit Sub
 fd_path = dlg.SelectedItems(1)

 Set fso = CreateObject("Scripting.FileSystemObject")

 If fso.GetFolder(fd_path).Files.Count < 1 Then
  MsgBox fd_path & " にはファイルが存在しません。"
  Set fso = Nothing
  Exit Sub
 End If

 Worksheets.Add Before:=Sheets(1)
 Range("A1").Value = fd_path
 Range("A2").Value = "のファイル一覧"
 Range("A4").Value = "ファイル名"

 i = 5
 For Each fl In fso.GetFolder(fd_path).Files
   Cells(i, "A").Value = fl.Name
   i = i + 1
 Next fl

 Set fso = Nothing

 MsgBox Sheets(1).Name & "にファイル名一覧を作成しました。"
End Sub

上記のマクロを実行すると、フォルダを選択するダイアログが表示され、そのフォルダに含まれるファイル名一覧が、新規ワークシートのA5セルから下に作成されます。

サンプルマクロの解説

フォルダを指定するダイアログを表示する、
 Set dlg = Application.FileDialog(msoFileDialogFolderPicker)
 If dlg.Show = False Then Exit Sub
 fd_path = dlg.SelectedItems(1)
の部分は、Dir関数を使う場合と同じです。

次からが、ロジックとしてはDir関数版と同じですが、コードは異なります。

まずFileSystemObjectをCreateObjectして、
 Set fso = CreateObject("Scripting.FileSystemObject")

指定されたフォルダのファイルが1つもないときには、メッセージを表示してマクロを終了します。
 If fso.GetFolder(fd_path).Files.Count < 1 Then
  MsgBox fd_path & " にはファイルが存在しません。"
  Set fso = Nothing
  Exit Sub

FileSystemObjectオブジェクトの、GetFolderメソッドでFolderオブジェクトを取得して、

ファイル名一覧を作成するExcelマクロ

FolderオブジェクトのFilesプロパティで、Filesコレクションオブジェクトを取得して、

ファイル名一覧を作成するExcelマクロ

FilesコレクションオブジェクトのCountプロパティでFileの数を調べています。

ファイル名一覧を作成するExcelマクロ

ちなみに、上図のオブジェクトブラウザーの詳細ペイン、間違ってますね。「ファイルの数」のはずなのに「フォルダの数」となってしまっています。ヘルプに記述ミスがあるのはやむを得ないことですが、ヘルプより信頼できるはずのオブジェクトブラウザーに間違った情報が表示されるのは勘弁していただきたいものです。

ファイル名一覧を作成するシートをブックの先頭に挿入して、
 Worksheets.Add Before:=Sheets(1)

見出しなどを作成して、
 Range("A1").Value = fd_path
 Range("A2").Value = "のファイル一覧"
 Range("A4").Value = "ファイル名"

A5セルから下にファイル名を書き出していきます。
 i = 5
 For Each fl In fso.GetFolder(fd_path).Files
   Cells(i, "A").Value = fl.Name
   i = i + 1

Dir関数を使うマクロではDo~Loop文を使っていましたが、FileSystemObjectを使う今回のマクロではFor Each~Next文です。

指定されたフォルダ内の全ファイルに対してループを回して、
 For Each fl In fso.GetFolder(fd_path).Files

ファイル名を書き出しています。
   Cells(i, "A").Value = fl.Name

ファイル名一覧を作成するExcelマクロ

最終更新日時:2018-12-13 09:30

[スポンサードリンク]

Home » FSO・FileSystemObjectの使い方 » ファイル名一覧を作成するExcelマクロ-File.Nameプロパティ

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

検索


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

.