Sub TEST1()
Dim A
'FileSystemObjectを設定する
Set A = CreateObject("Scripting.FileSystemObject")
Dim B
'ファイルパスを取得
For Each B In A.GetFolder("C:\Users\user\Desktop\TEST").Files
Debug.Print B
Next
End Sub
実行すると、ファイル一覧を取得できます。
ファイル一覧を取得できる
ファイル一覧を取得できました。
フォルダ一覧を取得
フォルダ一覧を取得するVBAコードになります。
Sub TEST1()
Dim A
'FileSystemObjectを設定する
Set A = CreateObject("Scripting.FileSystemObject")
Dim B
'フォルダパスを取得
For Each B In A.GetFolder("C:\Users\user\Desktop\TEST").SubFolders
Debug.Print B
Next
End Sub
実行すると、フォルダ一覧を取得できます。
フォルダ一覧を取得できる
フォルダ一覧を取得できました。
フォルダ内のすべてのフォルダを取得
フォルダ内のすべてのフォルダを取得するVBAコードです。
Sub TEST2()
Call TEST1("C:\Users\user\Desktop\TEST")
End Sub
Sub TEST1(C)
Dim A
'FileSystemObjectを設定する
Set A = CreateObject("Scripting.FileSystemObject")
Debug.Print C
Dim B
'フォルダパスを取得
For Each B In A.GetFolder(C).SubFolders
Call TEST1(B) '再帰する
Next
End Sub
「TEST1」を再帰的に実行するのがポイントです。
実行すると、サブフォルダを含むフォルダ一覧を取得できます。
すべてのフォルダ一覧を取得できる
サブフォルダを含むフォルダ一覧を取得できました。
フォルダ内のすべてのフォルダとファイルを取得
フォルダ内のすべてのフォルダとファイルを取得するVBAコードです。
Sub TEST2()
Call TEST1("C:\Users\user\Desktop\TEST")
End Sub
Sub TEST1(C)
Dim A
'FileSystemObjectを設定する
Set A = CreateObject("Scripting.FileSystemObject")
Debug.Print C
Dim D
'ファイルパスを取得
For Each D In A.GetFolder(C).Files
Debug.Print D
Next
Dim B
'フォルダパスを取得
For Each B In A.GetFolder(C).SubFolders
Call TEST1(B) '再帰する
Next
End Sub
実行すると、サブフォルダを含むフォルダとファイルの一覧を取得できます。
すべてのフォルダとファイル一覧を取得できる
サブフォルダを含むフォルダとファイルの一覧を取得できました。
フォルダとファイルの一覧をセルに出力
フォルダとファイルの一覧をセルに出力してみます。
Sub TEST2()
Range("A2:B10000").Clear
Call TEST1("C:\Users\user\Desktop\TEST")
End Sub
Sub TEST1(C)
Dim A
'FileSystemObjectを設定する
Set A = CreateObject("Scripting.FileSystemObject")
Dim D
'ファイルパスを取得
For Each D In A.GetFolder(C).Files
With Cells(Rows.Count, "B").End(xlUp)
'フォルダパスを入力
.Offset(1, -1) = Replace(C, "C:\Users\user\Desktop\TEST", "TEST")
'ファイル名を入力
.Offset(1, 0) = Dir(D)
End With
Next
Dim B
'フォルダパスを取得
For Each B In A.GetFolder(C).SubFolders
Call TEST1(B) '再帰する
Next
End Sub
セルに見出しを入力しておきます。
見出しを入力しておく
実行すると、フォルダとファイルの一覧を取得できます。
フォルダとファイル一覧をシートに入力できる
フォルダとファイルの一覧を取得できました。
セルに入力したフォルダパスを使う
セルに入力したフォルダパスを使って、フォルダとファイル一覧を取得してみます。
Sub TEST2()
Range("A2:B10000").Clear
'セルの値を初期値にする
Call TEST1(Range("D2"))
End Sub
Sub TEST1(C)
Dim A
'FileSystemObjectを設定する
Set A = CreateObject("Scripting.FileSystemObject")
Dim D
'ファイルパスを取得
For Each D In A.GetFolder(C).Files
With Cells(Rows.Count, "B").End(xlUp)
'フォルダパスを入力
.Offset(1, -1) = Replace(C, Range("D2"), Dir(Range("D2"), vbDirectory))
'ファイル名を入力
.Offset(1, 0) = Dir(D)
End With
Next
Dim B
'フォルダパスを取得
For Each B In A.GetFolder(C).SubFolders
Call TEST1(B) '再帰する
Next
End Sub
セルにフォルダパスを入力しておきます。
セルにフォルダパスを入力しておく
実行すると、セルに入力されたフォルダパスから、一覧を取得できます。
一覧を取得できる
セルに入力されたフォルダパスから、一覧を取得できました。
ハイパーリンクを設定する
取得したフォルダとファイル一覧に、ハイパーリンクを設定してみます。
Sub TEST2()
Range("A2:B10000").Clear
'セルの値を初期値にする
Call TEST1(Range("D2"))
End Sub
Sub TEST1(C)
Dim A
'FileSystemObjectを設定する
Set A = CreateObject("Scripting.FileSystemObject")
Dim D
'フォルダパスを取得
For Each D In A.GetFolder(C).Files
With Cells(Rows.Count, "B").End(xlUp)
'フォルダパスを入力
.Offset(1, -1) = Replace(C, Range("D2"), Dir(Range("D2"), vbDirectory))
'ファイル名を入力
.Offset(1, 0) = Dir(D)
'フォルダパスのハイパーリンクを設定
ActiveSheet.Hyperlinks.Add .Offset(1, -1), C
'ファイルパスのハイパーリンクを設定
ActiveSheet.Hyperlinks.Add .Offset(1, 0), D
End With
Next
Dim B
'フォルダパスを取得
For Each B In A.GetFolder(C).SubFolders
Call TEST1(B) '再帰する
Next
End Sub
実行すると、取得したフォルダとファイルにハイパーリンクを設定することができます。
ハイパーリンクを選択できる
フォルダとファイルにハイパーリンクを設定することができました。
セルをクリックして、フォルダとファイルを開くことができます。
フォルダとファイルを開ける
フォルダ名をクリックすると、フォルダを開くことができます。
ファイル名をクリックすると、ファイルを開くことができます。
ハイパーリンクを設定すると、フォルダやファイルを開くことができるので便利です。
フォルダ選択用ダイアログでフォルダを選択
フォルダ選択用ダイアログでフォルダを選択できるようにしてみます。
Sub TEST2()
'フォルダ選択用ダイアログを表示
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = ThisWorkbook.Path '初期フォルダの設定
If .Show = False Then Exit Sub
Range("D2") = .SelectedItems(1) '選択したフォルダパスを取得
End With
Range("A2:B10000").Clear
'セルの値を初期値にする
Call TEST1(Range("D2"))
End Sub
Sub TEST1(C)
Dim A
'FileSystemObjectを設定する
Set A = CreateObject("Scripting.FileSystemObject")
Dim D
'フォルダパスを取得
For Each D In A.GetFolder(C).Files
With Cells(Rows.Count, "B").End(xlUp)
'フォルダパスを入力
.Offset(1, -1) = Replace(C, Range("D2"), Dir(Range("D2"), vbDirectory))
'ファイル名を入力
.Offset(1, 0) = Dir(D)
'フォルダパスのハイパーリンクを設定
ActiveSheet.Hyperlinks.Add .Offset(1, -1), C
'ファイルパスのハイパーリンクを設定
ActiveSheet.Hyperlinks.Add .Offset(1, 0), D
End With
Next
Dim B
'フォルダパスを取得
For Each B In A.GetFolder(C).SubFolders
Call TEST1(B) '再帰する
Next
End Sub