Sub prcListFilesInSimpleOrder()
' 変数の宣言
Dim objFSO As FileSystemObject ' ファイルシステム操作オブジェクト
Dim fldMain As Folder ' メインフォルダを表すオブジェクト
Dim fldSub As Folder ' 各サブフォルダを表すオブジェクト
Dim filItem As File ' 個々のファイルを表すオブジェクト
Dim lngRow As Long ' Excelシートの行番号
Dim dlgFile As FileDialog ' ファイルダイアログオブジェクト
Dim strFolderPath As String ' 選択されたメインフォルダのパス
' FileSystemObjectの初期化
Set objFSO = New FileSystemObject
' ファイルダイアログの設定
Set dlgFile = Application.FileDialog(msoFileDialogFolderPicker)
With dlgFile
.Title = "メインフォルダを選択してください"
.AllowMultiSelect = False
If .Show = -1 Then
strFolderPath = .SelectedItems(1) ' 選択されたフォルダのパス
Else
' ユーザーがキャンセルした場合
MsgBox "フォルダ選択がキャンセルされました。", vbExclamation
Exit Sub
End If
End With
' メインフォルダオブジェクトの取得
Set fldMain = objFSO.GetFolder(strFolderPath)
' 出力開始行
lngRow = 1
' サブフォルダをループ
For Each fldSub In fldMain.SubFolders
' 各ファイルを直接Excelに出力
For Each filItem In fldSub.Files
lngRow = lngRow + 1
With ThisWorkbook.Sheets("Sheet1")
.Cells(lngRow, 1).Value = strFolderPath ' メインフォルダのパス
.Cells(lngRow, 2).Value = fldSub.Name ' サブフォルダ名
.Cells(lngRow, 3).Value = filItem.Name ' ファイル名
End With
Next filItem
Next fldSub
' オブジェクトのクリーンアップ
Set filItem = Nothing
Set fldSub = Nothing
Set fldMain = Nothing
Set objFSO = Nothing
Set dlgFile = Nothing
End Sub
コメント