VBA(Excelマクロ)でサブフォルダを含んでファイルの一覧、フォルダの一覧を取得する方法
掲載日:2022年7月12日
INFOMARTION > VBA(Excelマクロ)でサブフォルダを含んでファイルの一覧、フォルダの一覧を取得する方法
概要
VBA(Excelマクロ)でサブフォルダを含んでファイルの一覧、フォルダの一覧を取得する方法について記載したいと思います。以下の作業をプログラミングしたい人向けの記事となります。
- フォルダ配下のファイル、または、フォルダを全てフルパスで一覧取得したい。
- フォルダ配下のファイル、または、フォルダに対して、ループで処理を行いたい。
1. プログラミング方法
プログラミングの参考例は以下となります。
Functionで作成しているので、そのままコピペで持ってきて、Subからメソッド呼び出ししてもらえればと思います。
'Parameter Examples
'## filePath C:\Users\user\Desktop\test\
'## kind false:folder, true:file
'## list
Function getFolderOrFile(filePath As String, kind As Boolean, list As Collection) As Collection
'delete\
Dim filePathEnd As String
filePathEnd = Right(filePath, 1)
If filePathEnd = "\" Then
filePath = Left(filePath, Len(filePath) - 1)
End If
'Folder existence check
Dim result As String
result = Dir(filePath, vbDirectory)
If result = "" Then
MsgBox "File does not exist!"
Exit Function
End If
If kind Then
Dim buf As String
buf = Dir(filePath & "\*.*")
Do While buf <> ""
list.Add filePath & "\" & buf
buf = Dir()
Loop
Else
list.Add filePath
End If
Dim folder As Object
With CreateObject("Scripting.FileSystemObject")
For Each folder In .GetFolder(filePath).SubFolders
getFolderOrFile folder.Path, kind, list
Next folder
End With
End Function
使い方としては、引数に以下を渡します。
- filePath・・・ディレクトリを指定します。例)C:\Users\user\Desktop\test
- kind・・・true,falseを渡します。Trueの場合、ファイルの一覧を返します。Falseの場合、フォルダの一覧を返します。
- list・・・結果を格納するためのコレクションとなります。実装例は後述します。
実際のFunctionを呼び出す実装例は以下です。
Sub test()
Dim list As Collection
Set list = New Collection
getFolderOrFile "C:\Users\user\Desktop\test", False, list
Dim item As Variant
For Each item In list
'------TODO------
ThisWorkbook.Worksheets(1).Cells(1, 1).Value = item
Next
End Sub
getFolderOrFileを呼び出すと、listにファイル、または、フォルダのリストが格納されます。実装例はFalseとなっているのでフォルダの一覧が格納されます。
For文の中の「TODO」のところにやりたい処理を記載します。itemはString変数として扱えます。
参考ソースはエクセルのA1に取得したリストを設定する処理となります。(繰り返し同じセルを上書きする処理となります)
2. コードの説明
使い方の説明は以上で、続いてコードの説明をします。
細かい部分はコードを見ていただきたいですが、ポイントはgetFolderOrFileのメソッド中でさらにgetFolderOrFileを呼び出しているところです。
フォルダを探す処理の中で、さらに、フォルダを探す処理を呼び出すことで繰り返し処理を行い、全部のフォルダを検索する仕組みとなります。
自身のメソッドを呼び出すことにより、フォルダが見つかる限り繰り返し自身のメソッドが呼ばれ続け、全部のフォルダを検索します。
3. まとめ
VBA(Excelマクロ)でサブフォルダを含んでファイルの一覧、フォルダの一覧を取得する方法にお困りの方は参考にしてみてください。
最後までご覧いただきありがとうございました。