• ベストアンサー

フォルダの検索

フォルダの検索を行いたいのですが・・・。 例えば、下記のようなフォルダがあったとします。 No1--- 200209190951 - ファイル ← ○    |- 200209201000 - ファイル No2--- 200209191300 - ファイル    |- 200209201700 - ファイル ユーザより検索したいフォルダを選択してもらうとして、 『No1』『20020919』と条件を指定してもらったとして、 ○のフォルダ内のファイルを参照したいのですが・・・。 なかなか、よい方法が思いつかず、なにかあれば教えてくださいm(__)m

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

  • ベストアンサー
回答No.1

No1,No2もフォルダですよね?(d:\Test\は固定部分のフォルダに置き換えてください) dr = dir("d:\Test\" & "No1" & "\" & "20020919" & "*",16) で[d:\Test\No1\]フォルダの中にある[20020919*]のフォルダを検索できます。 2つ以上ある場合(この例では、200209と指定した場合) 2つ目からはdr = dir() File1.Path = "d:\Test\" & "No1" & "\" & "dr" ) でFileListBoxに"d:\Test\No1\200209190951"内のファイルが表示されます。 Fl = dir("d:\Test\" & "No1" & "\" & dr & "\" & "*.*") でもファイルを検索できますが、指定フォルダが2つ以上ある場合、 dir()は直前の指定しか次の検索結果を見ないので、 フォルダを配列等に保存しておく必要があります。 質問の意図はこれでよいでしょうか? 違っていたら補足をお願いします。

snowsaab
質問者

補足

ご回答ありがとうございます。 質問の意図はtaisuke555さんの考えてらっしゃるとおりであってます。 2つ以上ある場合、 1個目 dr = dir("d:\Test\" & "No1" & "\" & "20020919" & "*",16) 2個目 dr = dir() 3個目 dr = dir() で求まりました。 [dir()]は1個目を求めたときの引数を継続しているから、求まるのですか? たびたび、すいませんがよろしければ教えてください。

その他の回答 (3)

回答No.4

>[dir()]は1個目を求めたときの引数を継続しているから、求まるのですか? そうですね。 例えば、 dr = dir("d:\Test\" & "No1" & "\" & "20020919" & "*",16) while ( dr <> "" ) File1.Path = "d:\Test\" & "No1" & "\" & "dr" ) 'ファイル参照の処理 dr = dir() wend の場合は正常にdirを使えますが、 dr = dir("d:\Test\" & "No1" & "\" & "20020919" & "*",16) while ( dr <> "" ) Fl = dir("d:\Test\" & "No1" & "\" & dr & "\" & "*.*")   while ( FL <> "" ) 'ファイル参照の処理 Fl = dir() wend dr = dir() wend のような使い方はできません。 dr = dir()はdir("d:\Test\" & "No1" & "\" & dr & "\" & "*.*") の検索を引き継ぎ、 すでに最後まで検索していますので、エラーになります。 VBAについてはちょっと確認していませんが、 VBでのDir("...",16)の16はフォルダのみを取得しますので、No.3の方の フォルダかどうかチェックの部分は必要ないと思います。

snowsaab
質問者

お礼

そうなんですかぁ・・・。 補足にまで回答いただいてありがとうございました。 非常に参考になりましたm(__)m

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

>[dir()]は1個目を求めたときの引数を継続しているから そうだと思います。もう出来あがっていらっしゃるようですが、先日組んだものがあったので参考に載せます。 エクセルVBAですがよろしく。 Sub test03() Dim FileName As String 'フォルダ名、ファイル名を格納 Dim i As Integer, j As Integer 'カウンタ用変数 Dim strDir() As String '指定したフォルダ内に含まれるフォルダ名 Dim strFile() As String '指定したフォルダ内に含まれるファイル名 DirName = "c:\My Documents\" i = 0 j = 0 FileName = Dir(DirName, 16) 'Dir関数を使って指定したフォルダ内容を確認 Do While Len(FileName) <> 0 '格納されているものがなくなるまで On Error Resume Next '検索結果がフォルダかどうかをチェック If GetAttr(DirName & FileName) = 16 Then If Err <= 53 Then '"."や".."というフォルダも検索されるので、それをはずす '検索されたフォルダ名を配列変数に格納 ReDim Preserve strDir(0 To i) strDir(i) = DirName & FileName i = i + 1 End If Else '検索結果がフォルダ以外の場合 '検索されたファイル名を配列変数に格納 ReDim Preserve strFile(0 To j) strFile(j) = DirName & FileName j = j + 1 End If On Error GoTo 0 FileName = Dir() Loop k = j - 1 For i = 1 To k Worksheets("sheet1").Cells(i, 2) = strFile(i) Next i End Sub

snowsaab
質問者

お礼

ご丁寧にサンプルコードまで書いていただきありがとうございますm(__)m 非常に参考になりました。

回答No.2

No1の訂正 File1.Path = "d:\Test\" & "No1" & "\" & "dr" ) は File1.Path = "d:\Test\" & "No1" & "\" & dr です。 すみません。

関連するQ&A

専門家に質問してみよう