- ベストアンサー
テキストファイル内の文字列検索
はじめまして。 excel vbaを使用しているものです。 1つのファイル内にある複数のテキストファイル内に特定の文字列が含まれているかどうか検索したいと考えています。 もしあればそのファイル名を取得したいのですがどのようにすればよいでしょうか? 検索するファイル名「C:\Users\takashi sato\Desktop」 検索する文字列「STTT」半角 外部ファイルの操作はすごく難解なので困っております。 ちなみに使用ソフトはEXCEL2003です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
前回の処理内容のいくつか単語を検索すればまぁすぐだと思いますが… くやしいと思う程ならばもう少し自主的に検索をお勧めします。 まぁでも回答します。 FileSystemObject http://officetanaka.net/excel/vba/filesystemobject/filesystemobject.htm 前回の処理はFileSystemObjectを使用しています。 クラスからオブジェクト作成インスタンス化して実行と言う意味がわからなければもしかしたらサイトを見てもわからないかもしれませんが。 あと前回の処理ももう少し噛み砕いておきます。 'ファイルパスを定義します Path = "C:\Users\takashi sato\Desktop" '検索対象文字列を定義します fin = "STTT" 'オブジェクトを定義し、FileSystemObjectオブジェクトを作成します。 Dim myfso As Object Set myfso = CreateObject("Scripting.FileSystemObject") Set gf = myfso.GetFolder(Path) '指定フォルダにあるファイルの分だけforで回しファイル名と\マークで結合します。 For Each fl In gf.Files: fn = fn & fl.Name & "\": Next '末尾につく\マークを除外し\マークから配列化させます fn = Split(Left(fn, Len(fn) - 1), "\") 'エラーがあった場合処理をスキップする宣言 'テキスト形式で開けないまたは0KBのファイルはエラーが出るため。 On Error Resume Next 'もしもほかのファイルが混じる場合likeを使ってください。 'ファイル名 like "*.txt"などでよいでしょう。 For i = 0 To UBound(fn) Set otf = myfso.OpenTextFile(Path & fn(i)) 'readallを使いファイルを開き内容を変数に格納します datas = otf.readall '開いたデータに検索対象文字列があるか調べますある場合は\マークで結合していきます。 If InStr(datas, fin) > 0 Then filelist = filelist & fn(i) & "\" '開いたら閉じる(目には見えませんがファイルは開きっぱなしにしない事) otf.Close Next '末尾につく\マークを除外します filelist = Left(filelist, Len(filelist) - 1) '最後に内容を表示します。 MsgBox Replace(filelist, "\", vbCrLf) 以上 さらに補足・修正が欲しい場合言ってください。
その他の回答 (2)
- argument
- ベストアンサー率63% (21/33)
回答です Sub checkfiles() Path = "C:\Users\takashi sato\Desktop" fin = "STTT" Dim myfso As Object Set myfso = CreateObject("Scripting.FileSystemObject") Set gf = myfso.GetFolder(Path) For Each fl In gf.Files: fn = fn & fl.Name & "\": Next fn = Split(Left(fn, Len(fn) - 1), "\") On Error Resume Next For i = 0 To UBound(fn) Set otf = myfso.OpenTextFile(Path & fn(i)) datas = otf.readall If InStr(datas, fin) > 0 Then filelist = filelist & fn(i) & "\" otf.Close Next filelist = Left(filelist, Len(filelist) - 1) MsgBox Replace(filelist, "\", vbCrLf) End Sub 「C:\Users\takashi sato\Desktop」に任意の名前のテキストファイル”のみ”を複数置き実行すれば「STTT」の文字が書かれいてるテキストファイル名だけ表示します。量が多い場合msgboxでは完全には確認できませんが変数にはちゃんと格納されているので大丈夫です。 また上記では最低限の処理しかしていません。指定ディレクトリにあるファイルすべてをテキストとして開こうとするため予期しないファイルを開いたりしますので注意してください。 処理違いや補足・修正が欲しい場合言ってください。
お礼
argumentさまありがとうございます。 早速試してみますが、自分が理解できていないプログラムを使用するのはやはり悔しいので、いただいたプログラムを参考に勉強させていただきます。外部ファイル操作についてわかりやすい教材や、ホームページがあれば教えていただければ幸いです。
- nekoninjya
- ベストアンサー率34% (30/87)
ちょっと質問が難解なのですが、テキストファイルの中の文字列を探すのは、Windows標準の検索機能で探せます。 XPの場合ですと、「スタート」ボタン、開いたメニューの左側に検索があるので、それをクリック。 何を検索しますか?と犬が聞いてくるので、この場合はファイルとフォルダ全てをクリックします。 そこで条件を入力できるので、ファイルに含まれる単語または句に「STTT」と入れて検索すれば、STTTという文字列のファイルが一覧となって出てくるはずです。 (ファイル名の全てまたは一部は空白で構いません)
お礼
ありがとうございます。 その方法は知っていました。 ファイルを抽出するだけならその方法でも十分だったのですが、、、。
お礼
海外出張で長い間留守にしており、お礼が遅れ申し訳ありませんでした。解決しました。ありがとうございます。