様々なサイトを参考にして、自分でマクロを作り、うまく動作したまではいいのですが、不勉強で不備があるかどうか自分では判断できません…。
どなたか不備を指摘してはいただけないでしょうか。
内容:指定したフォルダ内のフォルダ名を、一行ずつ間を空けて書き出す。
Public Sub make_FolderList_02()
' FileSystemObjectを作成する。
Dim Obj As Object
Set Obj = CreateObject("Scripting.FileSystemObject")
' フォルダ名をシート上に出力する為のカウンタ
Dim cnt As Long
cnt = 0
' 「C:\Sample」フォルダ配下に存在するフォルダを一つずつ参照する。
Dim f As Object
For Each f In Obj.GetFolder("C:\Users\test\Desktop\test").SubFolders
' フォルダ名をシート上に出力する。
Range("A1").Offset(cnt, 0).Value = Obj.GetFolder(f).Name
cnt = cnt + 1
' 空白セルを出力する。
Range("A1").Offset(cnt, 0).Value = Null
cnt = cnt + 1
Next f
Set f = Nothing
' 別のフォルダを書き出す
Dim a As Object
For Each a In Obj.GetFolder("C:\Users\test\Desktop\nyannko").SubFolders
' フォルダ名をシート上に出力する。
Range("A1").Offset(cnt, 0).Value = Obj.GetFolder(a).Name
cnt = cnt + 1
Range("A1").Offset(cnt, 0).Value = Null
cnt = cnt + 1
Next a
Set a = Nothing
' オブジェクトを破棄する。
Set Obj = Nothing
End Sub
ここでは、2つのディレクトリを書き出していますが、実際には、6~7つ書き出す予定です。
また、参照先を共有フォルダにした場合、過剰な負荷が掛からないかどうかも、教えていただけると嬉しいです。
大変無駄の多い内容だとは思いますが、ご指導のほどよろしくお願いいたします。
おなじコードを何回も書くのは面倒なので、同一部分を別のプロシージャにしてメインから呼び出すようにしておくと楽です。あまり美しくないけど以下のような感じでいかがですか。
Call kakidasiで下のPrivate Sub kakidasiを呼び出しています。
探すディレクトリが増えたらRootFolder(x)を必要分確保すればそれだけで修正が済みます。
Public Sub make_FolderList_02()
Dim MyObj As Object
Dim cnt As Long, FolderCount As Integer
Dim RootFolder(1) As String
Set MyObj = CreateObject("Scripting.FileSystemObject")
RootFolder(0) = "C:\Users\Test"
RootFolder(1) = "C:\Users\Test2"
cnt = 0
FolderCount = 1 'RootFolderの数値に合わせます。
Call kakidasi(MyObj, RootFolder, cnt, FolderCount)
Set MyObj = Nothing
End Sub
Private Sub kakidasi(MyObj As Object, FoldersName() As String, ByRef cnt As Long, ByVal FolderCount As Integer)
Dim f As Object
Dim i As Integer
For i = 0 To FolderCount
For Each f In MyObj.GetFolder(FoldersName(i)).SubFolders
Range("A1").Offset(cnt, 0).Value = MyObj.GetFolder(f).Name
cnt = cnt + 1
' 空白セルを出力する。もともと空白なら上の行でcnt = cnt + 2としておけば下の2行はいりません
Range("A1").Offset(cnt, 0).ClearComments
cnt = cnt + 1
Next f
Set f = Nothing
Next i
End Sub
お礼
業務に使うために独学で覚えた知識なので、処理速度の良し悪しなどは知りませんでした。色々なアプローチの仕方があるんですね。 kkkkkmさんの一連の投稿、大変勉強になりました。ありがとうございました。