高校三年生の合唱祭で何を歌いましたか?

ExcelのVBAでの複数階層からのフォルダ名の取得

下記階層に対して以下の処理をExcelのVBAで行うにはどしたら良いか、
申し訳ありませんが、どうか教えて頂きたく思います。

C:\test1
  ├\aaa\ddd
  │   ├\xxx1\
  │   └\yyy2\
  │
  ├\bbb\ddd
  │   └\xxx3\
  │
  │
  └\ccc\ddd
      ├\xxx4\
      ├\xxx5\
      └\zzz6\

1 C:\test1を指定する
2 1で指定した中にある各\dddフォルダ内にあるフォルダ名を順に取得する
3 2で取得したフォルダ名をExcelのSheet1のA1から順に書き出す

Excel
  A    B    C    D    E
1 xxx1
2 yyy2
3 xxx3
4 xxx4
5 xxx5
6 zzz6
7
8
9
 Sheet1 Sheet2 Sheet3

勉強不足で申し訳ありません。
どうぞ宜しくお願い致します。

A 回答 (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
    • good
    • 2
この回答へのお礼

回答ありがとうございます。

抽出結果に加え、コーディングの内容と、まさに自分が作りたかったものです。

>Const 開始フォルダ = "C:\TEST1"

この部分に関しては、毎回指定・選択出来る形にしておこうと思いますので、
質問に記載していない部分を含め、調べて自己解決して完成させたいと思います。

皆様、本当にありがとうございました。

お礼日時:2010/06/25 00:20

フォルダ操作は利用頻度高いと思うので、


いきなり回答VBAを実行せずに内容(仕組み)を理解してから行う方が良いです。

応用がきくので、リンク先載せておきます。
「すぐに役立つエクセルVBAマクロ集」サイト
「ブックマーク」
http://www.asahi-net.or.jp/~zn3y-ngi/YNxv252.htm …
1) フォルダ中のファイル名をシートに書く

ネットでは、
ここ以外にも探せばいろいろ図解入り説明があると思います。
    • good
    • 2
この回答へのお礼

回答ありがとうございます。

仰る通り、今後色々な状況に対応するには、
根本を理解して自力で応用する必要がありますね。

単発操作はネットを参考に何とか分かるのですが、
それを他の操作と組み合わせたり繰り返す動作が現状飲み込めません。

今週末の休みに、参照先をしっかり勉強させて頂きます。

お礼日時:2010/06/25 00:12

詳しくは書きませんが、ファイルシステムオブジェクトを使って、C:\test1を取得してFor Eachでディレクトリ名を取り出しながらシートに記載していくほうが簡単だと思います。

    • good
    • 0
この回答へのお礼

回答ありがとうございます。
やはりFileSystemObjectが使い勝手が良さそうですね。

C:\test\aaa\ddd\を指定して、SubFoldersで、
ddd内部のフォルダ名を取得する事までは出来ましたが、
それを各フォルダから一気に取得する事が出来ませんでした。

どうも自分は、何か根本的な所が理解出来ていないようです。

お礼日時:2010/06/25 00:06

>複数階層からのフォルダ名の取得



フォルダ名が取得できれば,各フォルダからのファイルは拾い上げられるという前提で。

Dir関数の再帰呼び出しとFileSystemObjectを使う方法の2通り,下記を参考にマスターしておきましょう。
http://www.moug.net/tech/exvba/0150117.htm


ちなみにフォルダツリーの取得はあくまで途中経過で,最終的にはやはり中のファイルが必要だという場合,FileSearchする手も考えられます。ただしご利用のエクセルのバージョンによります。
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub0 …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
一応FileSystemObjectでの作成を考えています。

一部のフォルダ名の取得は自力で適いましたが、
各フォルダから拾い上げる事ができませんでした。

参照先の内容は非常に分かりやすいですね。
理解しておく必要がありますので、リンク先で勉強させて頂きます。

お礼日時:2010/06/24 20:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報