- ベストアンサー
複数あるファイルの中から同じ文字列を含むファイルのみを選別させて開くには
下記の通り同じフォルダーの中にある複数あるファイルを全部開くマクロはわかるのですが同じ文字列を含むファイルのみを自動選別させて開くにはどうすればいいのでしょうか? 具体的には"AAA-1" "AAA-2"のように"AAA-"を含む文字列のあるファイルは開きBBB-1"や"CCC-2"等文字列の含まないファイルは開かないようにしたいのですが。。アドバイスよろしくお願いいたします。 CSVFile = CurDir() FileName$ = Dir( CSVFile & "\*.csv", vbNormal) Do While FileName$ <> "" Workbooks.Open Filename:=FileName$ ・ ・ loop
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
ここまで分かっていれば、あと少しです FileName$ = Dir( CSVFile & "\*.csv", vbNormal) ↓ FileName$ = Dir( CSVFile & "\AAA-*.csv", vbNormal) でよいのではないでしょうか
その他の回答 (4)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 うまくいかなかった理由は、 .LookIn = Application.DefaultFilePath ですね。これは、Excelのツール・オプションのカレントフォルダに設定してある場所ですから、違う場所ですと、検索はヒットしません。 Dir() と違うのは、本来、ワイルドカード(*)がなくてもヒットする点です。
- Wendy02
- ベストアンサー率57% (3570/6232)
#2 の Wendy02です。 For Each myFile In .FoundFiles ○ a = myFile ←の部分 8行目ほどの a = myFile は、検査用のためだけで、余計ですから、削除してください。
- imogasi
- ベストアンサー率27% (4737/17069)
変数AAAには"AAA-"などの文字列をInputBox関数などでセット Do Whileの中で p=Instr(FileName$,AAA) If p<>0 Then ' (開く) End If で良いのではないですか。
お礼
imogasiさん。回答ありがとうございました。今後勉強させていただきたいと思います。ありがとうございました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 例えば、以下のように、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
お礼
Wendy02さん。丁寧な回答ありがとうございます。FileSearchも試してみましたが当方の知識不足でうまく動きませんでした。なんとかDirで解決できました。ありがとうございました。
お礼
bdrさん回答ありがとうございます。 AAAの手前にも文字があったので応用し手前にも*をつけることで解決できました。ありがとうございました。