- ベストアンサー
ExcelのVBAでの複数階層からのフォルダ名の取得方法
- ExcelのVBAを使用して、複数階層のフォルダからフォルダ名を取得する方法についてご質問いただきました。
- 具体的には、Cドライブのtest1フォルダ内にあるdddフォルダ以下のフォルダ名を取得し、ExcelのSheet1に書き出す方法についてお知らせください。
- 質問者様はVBAについての知識が不足しているため、ご教示いただけると幸いです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
※サンプルプログラムです。 Public 設定セル As Range Sub フォルダ処理() Const 開始フォルダ = "C:\TEST1" Dim objFSO As Object Dim objFolder As Object Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFolder = objFSO.GetFolder(開始フォルダ) Set 設定セル = Range("A1") Call 該当フォルダ取得(objFolder) Set objFolder = Nothing Set objFSO = Nothing End Sub Sub 該当フォルダ取得(フォルダパス As Object) Dim objSubFolder As Object For Each objSubFolder In フォルダパス.SubFolders Call 該当フォルダ取得(objSubFolder) Next If UCase(フォルダパス.ParentFolder.Name) = "DDD" Then 設定セル = フォルダパス.Name Set 設定セル = 設定セル.Offset(1) End If Set objSubFolder = Nothing End Sub
その他の回答 (3)
- layy
- ベストアンサー率23% (292/1222)
フォルダ操作は利用頻度高いと思うので、 いきなり回答VBAを実行せずに内容(仕組み)を理解してから行う方が良いです。 応用がきくので、リンク先載せておきます。 「すぐに役立つエクセルVBAマクロ集」サイト 「ブックマーク」 http://www.asahi-net.or.jp/~zn3y-ngi/YNxv252.html#1 1) フォルダ中のファイル名をシートに書く ネットでは、 ここ以外にも探せばいろいろ図解入り説明があると思います。
お礼
回答ありがとうございます。 仰る通り、今後色々な状況に対応するには、 根本を理解して自力で応用する必要がありますね。 単発操作はネットを参考に何とか分かるのですが、 それを他の操作と組み合わせたり繰り返す動作が現状飲み込めません。 今週末の休みに、参照先をしっかり勉強させて頂きます。
- karasuyasa-
- ベストアンサー率11% (3/26)
詳しくは書きませんが、ファイルシステムオブジェクトを使って、C:\test1を取得してFor Eachでディレクトリ名を取り出しながらシートに記載していくほうが簡単だと思います。
お礼
回答ありがとうございます。 やはりFileSystemObjectが使い勝手が良さそうですね。 C:\test\aaa\ddd\を指定して、SubFoldersで、 ddd内部のフォルダ名を取得する事までは出来ましたが、 それを各フォルダから一気に取得する事が出来ませんでした。 どうも自分は、何か根本的な所が理解出来ていないようです。
- keithin
- ベストアンサー率66% (5278/7941)
>複数階層からのフォルダ名の取得 フォルダ名が取得できれば,各フォルダからのファイルは拾い上げられるという前提で。 Dir関数の再帰呼び出しとFileSystemObjectを使う方法の2通り,下記を参考にマスターしておきましょう。 http://www.moug.net/tech/exvba/0150117.htm ちなみにフォルダツリーの取得はあくまで途中経過で,最終的にはやはり中のファイルが必要だという場合,FileSearchする手も考えられます。ただしご利用のエクセルのバージョンによります。 http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_130.html
お礼
回答ありがとうございます。 一応FileSystemObjectでの作成を考えています。 一部のフォルダ名の取得は自力で適いましたが、 各フォルダから拾い上げる事ができませんでした。 参照先の内容は非常に分かりやすいですね。 理解しておく必要がありますので、リンク先で勉強させて頂きます。
お礼
回答ありがとうございます。 抽出結果に加え、コーディングの内容と、まさに自分が作りたかったものです。 >Const 開始フォルダ = "C:\TEST1" この部分に関しては、毎回指定・選択出来る形にしておこうと思いますので、 質問に記載していない部分を含め、調べて自己解決して完成させたいと思います。 皆様、本当にありがとうございました。