• 締切済み

VBAでテキストファイルからの特定行抽出

エクセルのVBAで、テキストファイルから、特定の文字を含まない行だけを、別のテキストファイルに取り出す方法を教えてください。 具体的には、元のテキストファイルの中から、「.png」と、「.jpg」を含まない行を取り出して、別のテキストファイルに書き出したい。 元のテキストファイルは、エクセルでそのまま読み込むにはデータが大きすぎてエラーになってしまうので、、VBAで不要なデータを取り除いて、ファイルを小さくしていって、エクセルで扱える大きさにしていこうと思っています。 どなたかおわかりになる方がいらっしゃいましたら、どうぞよろしくお願いいたします。

みんなの回答

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

まぁ、どう書いても似たようなマクロになってしまいますが。 sub macro1()  dim buf as string  dim myFile1 as string  dim myFile2 as string  myfile1 = "c:\test\inputfile.txt"  myfile2 = "c:\test\out.txt"  open myfile1 for input as #1  open myfile2 for output as #2  do until eof(1)   line input #1, buf  '「.png」と、「.jpg」を含まない   if buf like "*.png*" or buf like "*.jpg*" then   else    print #2, buf   end if  loop  close #2  close #1 end sub #補足 一応ご参考までに、標準の設定ではpngとPNGを区別します。 必要ならoption compare textなどを併用します。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

書き方はいろいろありますが、以下でどうでしょう。 なお、改行コードなどが途中になく、普通に改行されているものと します。 Sub test()   Dim buf As String   Dim i As Long   Dim j As Long   Dim s1 As String   Dim s2 As String   s1 = ".png"   s2 = ".jpg"   '読み込みモードで開く   Open "C:\Temp\test1.txt" For Input As #1   '追加モードで開く   Open "C:\Temp\test2.txt" For Append As #2     Do Until EOF(1)       '検索のために一行読み込み、bufに格納       Line Input #1, buf       's1が存在するか確認       i = InStr(buf, s1)       's2が存在するか確認       j = InStr(buf, s2)       'どちらかが存在する場合       If i > 0 Or j > 0 Then         '何もしない       'どちらも存在しない場合       Else         '書き込み         Print #2, buf       End If     Loop   Close #1   Close #2 End Sub

関連するQ&A

  • Excel VBA テキストファイルからの抽出

    Excel VBAにて、テキストファイルから文字列を選別して、それをエクセルファイルのテキストボックスに張り付けるコードの記述をご教授いただけますでしょうか。 環境はWindows7 Pro Excel2010 下記テキストファイルです。 test.txt IDENTIFICATION DIVISION. PROGRAM-ID. sample AUTHOR. XXX * ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT A ASSIGN TO B SELECT C ASSIGN TO D DATA DIVISION. FILE SERECTION. この FILE-CONTROL.と DATA DIVISIONの間に挟まれている SELECT A ASSIGN TO B SELECT C ASSIGN TO D この2行を取り出して、エクセルファイル上にあるテキストボックス張り付ける処理です。 よって、FILE-CONTROL.と DATA DIVISION.の間にある不特定多数の行を抽出するロジックです。 テキストボックスに張り付ける前の行を抽出するだけでも、ご教授頂けたら幸いです。 よろしくお願いします。

  • テキストファイルから指定行を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の知識が無い為、勝手を申しますが詳しくご教示頂けると幸いです。 宜しくお願い致します。

  • テキストファイル→抽出した行をexcelに

    VBAで、下記のようなログファイルのテキストを読み込んで、必要な文字が含まれる行だけを、エクセルに書き込むコードを教えていただけると助かります。 読み込むファイルの例(実際は、数万行あります) (1行目)dammy.co.jp - - [01/Jan/2015:00:03:51 +0900] "GET /west/index.html      HTTP/1.0" 200 ..... (2行目)smotor.co.jp - - [01/Jan/2015:00:03:51        +0900] "GET /drink/orange/index.html HTTP/1.0" 200 ..... たとえば、/west/ が含まれる行だけを抽出して、excelシートに書き込みたい ログファイルは、改行コードがCRLFです。  どなたかお分かりになる方、お助けください。 当方、VBAは初心者なので、説明も加えていただけると非常に助かります。

  • 【VBA】テキストファイルを指定行数からの読み込み

    こんばんは。 EXCEL VBAでテキストファイルを読み込む事について質問です。 VBAでテキストファイルをこちらから指定する行数(上から何番目という感じで)からデーターを読み込みたいのですが、どの関数をつかっていいかわからず困っています。 1行ずつ読みこむ「Input Line関数」では、無駄な行まで読み込むので動作が遅くなります。 読み込みたい行はすでにわかっているので、最初からその行に飛んでからデーター読み込みたいと思ってます。 ちなみに指定する行数は、ファイルによって違います。 あらかじめ「Input Line関数」で、ある文字が何行目にあるかを探す行為をあらかじめ行っています。 みなさまのアイデアを拝借したく、よろしくお願いします。

  • テキストファイルからの抽出

    VBAでもコマンドプロンプトでもいいのですが、1000行くらいあるテキストファイルを読み込んで、キーワード「タイムアウト」を含む行の1つ手前の行の文字列を抽出、それらを1つのファイルにまとめて出力させたいのです。 VBAで自分なりにやってみたのが http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12142881517 の最後の回答にあるマクロに手を少し加えて「タイムアウト」のある行番号をテキストファイルに出力し、その出力ファイルを読み込んで、一つ手前の行番号のリストを作ることまではできました。 ですが、どうやってそのリストから行番号を指定して、元のファイルからタイムアウトを含む行の1つ手前の行を抽出し、1つのファイルにまとめて出力させられるのかが分かりません。 後Powershellはまだ勉強途中なのですが、こっちでならできますか? アドバイスをお願いします。

  • テキストで特定の文字列を含む行を削除

    テキストエディタで特定文字列を含む行と空白の行を削除したいです。 このようなことができるフリーのソフトがあったら教えてください。 テキストデータは数メガになりますのでメモ帳のような簡単なエディタでは開けません。 また、エクセルでも最大行を超えるため読み込めません。

  • VBA 複数ファイルを読み込んで、抽出

    VBA初心者です。どうぞよろしくお願いいたします。 <やりたいこと> 同じフォルダにある複数ファイル(logファイル)を順番に読み込み、 特定の文字が含まれている行だけを、別ファイル(sum.csv)に保存していきたい。 ファイルが多数あるため、VBAで処理できればと思っています。 急いでおり、今回は丸投げになりますが、どなたかコードを教えていただけますと 非常に助かります。 コードを見て、勉強させていただきます。 どうかよろしくお願いいたします。

  • テキストファイルの特定行、特定列に文字を挿入

    テキストファイルがあるとします。 ある特定の行、特定の列に文字を挿入したいです。 又は、あらかじめ、特定の文字を書いておき、 置換により文字を置き換える方法でも良いです。 これを、コマンドを使用し、batファイルで自動的に 実行したいです。 どのような方法があるでしょう?

  • VBAでテキストファイルをEXCELに取り込む方法

    VBA初心者です。下記の要件の動きについてどう組めば良いのかほぼ???の為、どなたか回答よろしくお願いします。 ・インポート時はテキストを毎回選択する。←これは何とか実装できています。 ・インポートされたテキストファイルは「テキストファイル名」で別作成する。このインポート先Excelファイルには項目は定型で作成されており、行途中から、データの貼り付けを行いたい。 ・このExcelファイルには罫線を挿入したい。 以上です。何だか詳しい内容がかけなくてゴメンナサイ!

  • ファイルの特定行の抽出

    C++言語についての質問です。 C++を利用して下記の処理を考えています。 下記のようなテキストファイルから、「名前」で始まる行だけを 抽出して、別のテキストファイへ書き込みを行います。 また、その際に”「名前」の表記”+”スペース文字”は削除します。 ----------------- 住所 東京都 名前 AAAAA 年齢 15才 ----------------- 住所 神奈川県 名前 BBBBB 年齢 20才 ----------------- <略> 実行後に出力されるテキストファイルには、 AAAAA BBBBB と記載されるように処理を行いたいです。 初心者のため、実現可能かも分かっていません・・。 お手数ですが、アドバイスをお願いします。 具体的な方法についても記載して頂けると助かります。 よろしくお願いします。