• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複数フォルダに格納されたファイル名取得VBA)

複数フォルダに格納されたファイル名取得VBA

このQ&Aのポイント
  • 複数のフォルダに格納されたファイルの情報を取得するVBAプログラムです。
  • 実行するとエラーが発生し、解決方法がわからない状況です。
  • この問題が解決できないと、毎日繰り返し作業が必要になります。

質問者が選んだベストアンサー

  • ベストアンサー
  • uruz
  • ベストアンサー率49% (417/840)
回答No.3

エラーの理由はNo2さんが回答していますので..... Dir()関数は入れ子にできないのでフォルダの取得とファイルの取得を別々に考えます。 まずフォルダのみを収集しそのフォルダ内のファイルを取得します。 例:(見やすくするために全角スペースでイデントしています) Sub test2()  Dim buf As String  Dim fName As String  Dim msg As String  Dim AA() As String  Dim i As Long  'フォルダの取得  ReDim AA(0)  buf = Dir("*.*", vbDirectory)  Do While buf <> ""   If GetAttr(buf) = vbDirectory Then    If buf <> "." And buf <> ".." Then     ReDim Preserve AA(UBound(AA) + 1)     AA(UBound(AA)) = buf     Cells(UBound(AA), 3) = buf    End If   End If   buf = Dir()  Loop  'ファイルの取得  For i = 1 To UBound(AA)   fName = Dir(CurDir & "\" & AA(i) & "\" & "*.jpg")   Do While fName <> ""    cnt = cnt + 1    Cells(cnt, 1) = AA(i)    Cells(cnt, 2) = fName    msg = msg & buf & "\" & fName & vbCrLf    fName = Dir()   Loop   MsgBox msg  Next i End Sub

japan116
質問者

お礼

ご回答ありがとうございます! まさにやりたいことが実現できました(^O^)

その他の回答 (2)

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.2

VBAのヘルプ、Dir関数の説明にある、 | 一致するファイル名がない場合は、Dir 関数は長さ 0 の文字列を返します。長さ 0 の文字列が返された場合は、次に Dir 関数を呼び出すときに引数 pathname を再び指定しなければなりません。指定しないとエラーが発生します。 の通りのエラーです。 ループの中で、 fName = Dir() が空白になった際、内側のループを抜けた後の、 buf = Dir() がエラーになります。 Dir関数は入れ子にして使う、再帰的に呼び出すなんかの場合は、ちょっと工夫が要るかも? DIR関数 - Visual Basic - 教えて!goo http://okwave.jp/qa/q3040393.html

  • papapa0427
  • ベストアンサー率25% (371/1472)
回答No.1

そりゃそうでしょう。 かなり間違った解釈をされています。 >buf = Dir("*.*", vbDirectory) bufはstring型ですから、一つのファイル名しか入りませんよ。 それに複数のファイル名を入れようとしているんですからエラーになって当然ですね。 >Do While buf <> "" この解釈も同様の誤りに起因しています。 まずはファイル名を一つ一つ取り込むプログラムを書かれてはいかがでしょう。 ここでこういう風にプログラム書いたら良いよってのは匿名でやっている関係上責任持てませんので出来ません。あくまでも自助努力のお助けをするだけです。

japan116
質問者

お礼

早々のご回答ありがとうございました。 ファイル名を一つずつ取り込むところはできたんですけど、 それを全フォルダでって言うところが難しくて・・・