プロが教えるわが家の防犯対策術!

vba初心者です。
フォルダの中に複数のサブフォルダがあり、その各サブフォルダ内のファイルのパスをリスト化したいです。

サブフォルダごとに行を分けて、それぞれの行のB,C,D,E......列に順にファイルパスを〇〇元データというブックに表示させたいのですが、全サブフォルダの全ファイルのパスが全て同じ行のB,C,D,E,,,,,列に表示されるところまでしかわかりません。

色々調べてみたのですがどうしても解決できず困っています。よろしくお願いいたします。

今:
2行目に サブフォルダ1のファイルパス1、サブフォルダ1のファイルパス2、サブフォルダ2のファイルパス1、サブフォルダ2のファイルパス2

目指す形:
2行目に サブフォルダ1のファイルパス1、サブフォルダ1のファイルパス2
3行目に サブフォルダ2のファイルパス1、サブフォルダ2のファイルパス2

A 回答 (1件)

こんにちは



ご質問文に疑問点が多すぎるのですが・・・

>vba初心者です。
アプリケーションが不明ですけれど、

>それぞれの行のB,C,D,E......列に~
とあるので、エクセルってことと推測しました。

>サブフォルダごとに行を分けて、それぞれの行の
>B,C,D,E......列に順にファイルパスを~
パス(=フルパス)だとするなら、前半は同じものが並ぶだけだし、かつ列に並べる形式だとまともに表示させようとすると、横にメッチャ長くなって見にくくてしかたがないのではと想像してしまいます。

また、ご質問文の方式だと、リスト化するのは1階層下のフォルダまで限定という意味でしょうか?
サブフォルダ内ではなく、元フォルダ直下のファイルは無視ってことなのでしょうかね・・・
さらには、孫フォルダがあっても、それは無視ということなのかなぁ?
あるいは、孫フォルダまでは(ファイルと同じ扱いで)パスを列に記入して、それ以下の階層のファイルは無視ってことなのかなぁ・・・


>色々調べてみたのですがどうしても解決できず困っています
まぁ、内容や結果は別にして、方法がわかれば良いものと考えました。
以下は、内容的にはご質問文そのままとして、作成してみた一例です。
 ・元フォルダのサブフォルダのみを対象とする
  (元フォルダ直下のファイルは無視)
 ・サブフォルダ直下のファイルのパスを、1行内に(列を変えて)順に転記
  (サブフォルダ下のフォルダ以降は無視)
 ・サブフォルダ毎に1行を使用するものとする
と解釈しました。

※ 上の疑問で記したように、見にくい結果になりますけれど、方法がわかれば良いものと考えました。
考え方の一例なので、実際の目的の内容に合わせて応用なされば宜しいでしょう。

※ 方法のみなので、元フォルダの指定、出力対象シート等は固定にしてあります。
(出力シートはアクティブシートにしてあります)

以下、ご参考までに。

Sub Q_13227758()
Dim fs, folder, file
Dim sh As Worksheet, rg As Range
Const fso = "Scripting.FileSystemObject"
Const fPath = "C:\Users\USERNAME\hoge" '←調査対象フォルダパス
Set sh = ActiveSheet '←出力対象シート

sh.Cells.ClearContents
Set rg = sh.Cells(2, 1)
Set fs = CreateObject(fso)
If Not fs.folderExists(fPath) Then Exit Sub

For Each folder In fs.getfolder(fPath).subFolders
 For Each file In folder.Files
  rg.Value = file.Path
  Set rg = rg.Offset(, 1)
 Next file
 Set rg = sh.Cells(rg.Row + 1, 1)
Next folder

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

お礼が大変遅くなりた申し訳ありません。
教えていただいた通り試したところ、思っていた通りに動きました。
本当に助かりました。ありがとうございました。

お礼日時:2023/10/03 19:48

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