• 締切済み

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

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

みんなの回答

  • keithin
  • ベストアンサー率66% (5278/7941)
回答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