• ベストアンサー

複数あるファイルの中から同じ文字列を含むファイルのみを選別させて開くには

下記の通り同じフォルダーの中にある複数あるファイルを全部開くマクロはわかるのですが同じ文字列を含むファイルのみを自動選別させて開くにはどうすればいいのでしょうか? 具体的には"AAA-1" "AAA-2"のように"AAA-"を含む文字列のあるファイルは開きBBB-1"や"CCC-2"等文字列の含まないファイルは開かないようにしたいのですが。。アドバイスよろしくお願いいたします。 CSVFile = CurDir() FileName$ = Dir( CSVFile & "\*.csv", vbNormal) Do While FileName$ <> "" Workbooks.Open Filename:=FileName$ ・ ・ loop

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

  • ベストアンサー
  • bdr
  • ベストアンサー率43% (35/80)
回答No.1

ここまで分かっていれば、あと少しです FileName$ = Dir( CSVFile & "\*.csv", vbNormal) ↓ FileName$ = Dir( CSVFile & "\AAA-*.csv", vbNormal) でよいのではないでしょうか

tetsufumosan
質問者

お礼

bdrさん回答ありがとうございます。 AAAの手前にも文字があったので応用し手前にも*をつけることで解決できました。ありがとうございました。

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんにちは。 うまくいかなかった理由は、  .LookIn = Application.DefaultFilePath ですね。これは、Excelのツール・オプションのカレントフォルダに設定してある場所ですから、違う場所ですと、検索はヒットしません。 Dir() と違うのは、本来、ワイルドカード(*)がなくてもヒットする点です。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

#2 の Wendy02です。 For Each myFile In .FoundFiles ○ a = myFile ←の部分 8行目ほどの a = myFile は、検査用のためだけで、余計ですから、削除してください。

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

変数AAAには"AAA-"などの文字列をInputBox関数などでセット Do Whileの中で p=Instr(FileName$,AAA) If p<>0 Then ' (開く) End If で良いのではないですか。

tetsufumosan
質問者

お礼

imogasiさん。回答ありがとうございました。今後勉強させていただきたいと思います。ありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 例えば、以下のように、FileSearch を使えばよいです。 それから、FileName$ エラーにはなりませんが、FileName という変数はあまり使わないほうがよいです。 別に、Dirをそのまま使ってもよいのですが、複雑な場合は、FileSearchが便利です。 サンプルコード Sub OpenCsvFiles()   Dim myFile As Variant   With Application.FileSearch    .LookIn = Application.DefaultFilePath    .FileName = "AAA-*.csv"    If .Execute() > 0 Then      For Each myFile In .FoundFiles       a = myFile       Workbooks.Open myFile      Next    End If   End With End Sub

tetsufumosan
質問者

お礼

Wendy02さん。丁寧な回答ありがとうございます。FileSearchも試してみましたが当方の知識不足でうまく動きませんでした。なんとかDirで解決できました。ありがとうございました。

関連するQ&A