VBA(Excelマクロ)でサブフォルダを含んでファイルの一覧、フォルダの一覧を取得する方法


掲載日:2022年7月12日



INFOMARTION > VBA(Excelマクロ)でサブフォルダを含んでファイルの一覧、フォルダの一覧を取得する方法

概要

VBA(Excelマクロ)でサブフォルダを含んでファイルの一覧、フォルダの一覧を取得する方法について記載したいと思います。以下の作業をプログラミングしたい人向けの記事となります。

  • フォルダ配下のファイル、または、フォルダを全てフルパスで一覧取得したい。
  • フォルダ配下のファイル、または、フォルダに対して、ループで処理を行いたい。

目次

  1. プログラミング方法
  2. コードの説明
  3. まとめ

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マクロ)でサブフォルダを含んでファイルの一覧、フォルダの一覧を取得する方法にお困りの方は参考にしてみてください。

最後までご覧いただきありがとうございました。



■INFORMATION

INFORMATIONのトップページはこちらよりお願いいたします。


■PROFILE

プロフィールはこちらよりお願いいたします。


■お問い合わせ先

記事に関するお問い合わせはこちらよりお願いいたします。