• ベストアンサー

テキストファイル内の文字列検索

はじめまして。 excel vbaを使用しているものです。 1つのファイル内にある複数のテキストファイル内に特定の文字列が含まれているかどうか検索したいと考えています。 もしあればそのファイル名を取得したいのですがどのようにすればよいでしょうか? 検索するファイル名「C:\Users\takashi sato\Desktop」 検索する文字列「STTT」半角 外部ファイルの操作はすごく難解なので困っております。 ちなみに使用ソフトはEXCEL2003です。

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

  • ベストアンサー
  • argument
  • ベストアンサー率63% (21/33)
回答No.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) 以上 さらに補足・修正が欲しい場合言ってください。

moresho
質問者

お礼

海外出張で長い間留守にしており、お礼が遅れ申し訳ありませんでした。解決しました。ありがとうございます。

その他の回答 (2)

  • argument
  • ベストアンサー率63% (21/33)
回答No.2

回答です 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では完全には確認できませんが変数にはちゃんと格納されているので大丈夫です。 また上記では最低限の処理しかしていません。指定ディレクトリにあるファイルすべてをテキストとして開こうとするため予期しないファイルを開いたりしますので注意してください。 処理違いや補足・修正が欲しい場合言ってください。

moresho
質問者

お礼

argumentさまありがとうございます。 早速試してみますが、自分が理解できていないプログラムを使用するのはやはり悔しいので、いただいたプログラムを参考に勉強させていただきます。外部ファイル操作についてわかりやすい教材や、ホームページがあれば教えていただければ幸いです。

回答No.1

ちょっと質問が難解なのですが、テキストファイルの中の文字列を探すのは、Windows標準の検索機能で探せます。 XPの場合ですと、「スタート」ボタン、開いたメニューの左側に検索があるので、それをクリック。 何を検索しますか?と犬が聞いてくるので、この場合はファイルとフォルダ全てをクリックします。 そこで条件を入力できるので、ファイルに含まれる単語または句に「STTT」と入れて検索すれば、STTTという文字列のファイルが一覧となって出てくるはずです。 (ファイル名の全てまたは一部は空白で構いません)

moresho
質問者

お礼

ありがとうございます。 その方法は知っていました。 ファイルを抽出するだけならその方法でも十分だったのですが、、、。

関連するQ&A

  • 多数のテキストファイルからの文字列の取り出し

    いま、わたしが持っているヴィジュアルベーシックは VB6.0です。PCはノートで、OSはXPです。 課題: あるフォルダーに1000くらいのテキストファイルがあって、 その各テキストファイルから たとえば、「「不特定長さの文字列1」」・・・・・・・・((不特定長さの文字列2)) の不特定長さの文字列1と不特定長さの文字列2を とりだし、 それをファイル名「まとめ表」というテキストファイルに ファイル名    文字列1   文字列2 ファイル1   あいうえお  かきくけこ ファイル2   さしすせそ  たちつてと  ・         ・        ・  ・         ・        ・ のように書き込むというプログラムを作成したいのですが、 できるでしょうか? できるとすると、 プログラムの およその考え方と 使用する命令語はどのようなものになりますか? ご回答をおまちしております。 よろしくおねがいいたしますm(__)m

  • 検索文字列以外のファイル

    テキストファイルの中身を検索して、その文字列以外のファイル名を取りたいのです。具体的には、 【A.txtの中身】 123 abc 【B.txtの中身】 111 abc 【C.txtの中身】 222 abc このようなテキストファイルの中身を検索して、文字列「123 abc」以外が書かれているファイル名(つまり、B.txt、C.txt)を取得したいのですが、findstrやForなどを駆使すれば、できますでしょうか?

  • 複数のテキストファイルから全角文字を検索する方法

    お世話になっております。 windows10を使用して、半角文字を使用したテキストファイルを 作成しています。 そのテキストファイルは複数あるのですが、ファイルの一つに全角 文字が紛れ込んでいることがわかりました。 文字は特定の文字ではないので、findstrコマンドで検索することが できません。 その全角文字を検索する方法はありますでしょうか。 以上、よろしくお願いいたします。

  • テキストファイル中のカタカナ文字をスペースに変換

    エクセル(VBA)で テキストファイル(.txt)中の半角カタカナ文字を半角スペース文字に置き換えたいのですが ネットで検索しても同じ項目が探しきれませんでした。 どのようなコードが考えられますか ? Office 2019

  • フォルダ内のファイルの文字列を検索

    フォルダ内のファイルの文字列を検索したいと思っています。 Windows標準の検索は.txtや.htmlからは文字列を探してくれるのですが、 他の拡張子からは探してくれません。 ちなみに検索してほしい文字列が含まれたファイルはメモ帳で開くとテキストです。 他の拡張子内のファイルも検索してくれる方法があれば、是非ご伝授お願いします。

  • 【検索】「含まれる文字列」で検索してヒットしない

    Win98SEの「検索」-「ファイルやフォルダ」-「含まれる文字列」で 実際にある文字列を入力してもヒットしません。 ヒットさせるには、どうすればよいでしょうか? ヒットさせたいファイルは WordやExcel2000で作成し、何度か編集済みのものです。 機種:NECMateNX MA46H 他何台かあり OS:Win98SE 使用しているアプリ:Word/Excel2000 ヒットさせたい文字列:テキストボックスではなく、            普通に文字入力している内容            (例) 前橋店 とか  伊香保温泉  とか            文字列の前後に「*」を付けてもダメでした。 ファイルの名前の一部を入力して検索した場合は 正しく機能して結果が表示されています。 講習でこの機能を説明したいので、 どなたかヒットさせる方法をご存知でしたら 教えてください。 よろしくお願いします。<(_ _)>

  • 文字列検索 複数のテキストファイル

    最近趣味でC言語を始めたのですが、 大本のリストを含んだテキストファイルに含まれる文字列 【テキストの中身】 osaka nagoya tokyo 上のリストを行ごとに読み込んで もう一つのファイルから検索して該当する文字列を含む行以外を削除するようにしたいのですが何か良い方法はないでしょうか? 色々調べながらやってはいるもののまだまだ勉強不足なせいかわからず困っております。よろしければご教授お願いします。

  • テキストファイルから指定行をExcelに抽出したい。

    「WindowsXP」/「Office2003Professional」を使用しています。 一つのフォルダに格納された複数のテキストファイルから、指定した文字列を含んだ行だけをExcelに抽出し、一覧表にする方法を教えて下さい。 各テキストファイルの抽出したい部分は以下のようになっています。(一部抜粋) ------------------ +製造元 *NEC +型番 *ABC-000 +メモリMAX *512GB +スロット数 *2 +DIMM1 *256 MB *333MHz +DIMM2 *256 MB *333MHz ------------------ 文字の先頭に[+]がついているものが検索文字列で、[*]が抜き出したいデータ部分です。 (実際のテキストでは[+]や[*]は書いてありません。) これをExcelで検索文字列を項目名に指定し、[*]部分を抜き出し全テキストファイルを一覧表にしたいと思っています。(行列反転した表) ------------------     A        B    C    D       E       F     G 1 ファイル名 製造元   型番  メモリMAX スロット数  DIMM1   DIMM2 … 2 aaa.txt NEC   ABC-000  512MB     2 256MB   256MB 3 bbb.txt FUJITU FMV10 1024MB 2 512MB                ・                ・ ------------------ ●テキストファイルの検索文字列とデータの間には半角スペースが入っています。 ●テキストファイルの検索文字列の行位置はファイルごとに異なります。 ●テキストファイルの検索文字列の中にはファイルによっては存在しない文字列もあります。 ●ExcelのA列にはフォルダ内のファイル名が予め全て入力されています。 もしもVBAを使用しなければならない場合は、VBAの知識が無い為、勝手を申しますが詳しくご教示頂けると幸いです。 宜しくお願い致します。

  • 複数の文字列検索

    いつもお世話になっています。 色々な文字列検索ソフトを使用してみたのですが なかなか思い通りの結果が出ずに悩んでおります。  複数検索が出来るソフトでも、同一行内の検索となっていたりするので・・・・ (1)複数フォルダーに大量にあるテキスト形式で書かれたファイルから (2)複数の文字列が含まれているファイルを探し出す たとえば、「あああ」と「いいい」の両方が含まれているファイルを探し出すことを行いたいのですが・・・・・ どうぞ、よろしくお願いします

  • テキストから文字列を検索して分岐処理

    WindowsXP(SP2)環境で、複数のテキストファイル内にある文字列から自端末名を検索し、その結果(どのテキストファイル内にあったか)で処理を分岐するツールを作成したいのですが、何かいい方法はありますでしょうか。 テキスト内は下記のような作りにしようと思っています。 バッチファイルかvbsが理想です。 aaa bbb ccc ・ ・ ・