dポイントプレゼントキャンペーン実施中!

エクセルマクロで指定フォルダの下層フォルダにあるファイル全てを集計したいのですが、1階層下のフォルダ内のファイルしか集計されません。なぜでしょうか。
Set GetFolder = Fso.GetFolder(myFolder) For Each Fol In GetFolder.SubFolders Debug.Print Fol.Name Next

A 回答 (2件)

こんにちは



>なぜでしょうか。
誤解があるようです。

>For Each Fol In GetFolder.SubFolders
.SubFoldersでは、指定フォルダ直下のフォルダが得られるだけで、それ以下の階層(2階層以上)のフォルダは取得できません。
(全ての包含されているフォルダを取得するわけではない)

ですので、それ以下の階層のフォルダやファイルを取得したければ、Fol内のファイル、フォルダに対して同様の処理を行う必要があります。
要は、Fol を myFolder と同様に扱って・・・と処理してゆく必要があります。

2階層程度と決まっていれば、そのまま記述しても大したことはありませんけれど、階層が何階層もある場合には、No1様のおっしゃるように「再起処理」にするのが効率の良い記述になります。
(というか、不確定の階層数に対して処理をするには、そのようにしておかないとならない)

以下は、ファイルの一覧を作成する例です。
後半部分(フォルダ内の全ファイルを取得)がご参考になるのではないかと思います。
https://mmm-program.com/vba-get-files/
    • good
    • 1
この回答へのお礼

ありがとうございました。大変よくわかりました。

お礼日時:2021/10/01 15:19

『FSO 再帰処理』がヒントになるかもです。

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

ありがとうございました。

お礼日時:2021/10/01 15:19

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

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


このQ&Aを見た人がよく見るQ&A