- 締切済み
VBAでテキストファイルからの特定行抽出
エクセルのVBAで、テキストファイルから、特定の文字を含まない行だけを、別のテキストファイルに取り出す方法を教えてください。 具体的には、元のテキストファイルの中から、「.png」と、「.jpg」を含まない行を取り出して、別のテキストファイルに書き出したい。 元のテキストファイルは、エクセルでそのまま読み込むにはデータが大きすぎてエラーになってしまうので、、VBAで不要なデータを取り除いて、ファイルを小さくしていって、エクセルで扱える大きさにしていこうと思っています。 どなたかおわかりになる方がいらっしゃいましたら、どうぞよろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- keithin
- ベストアンサー率66% (5278/7941)
まぁ、どう書いても似たようなマクロになってしまいますが。 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)
書き方はいろいろありますが、以下でどうでしょう。 なお、改行コードなどが途中になく、普通に改行されているものと します。 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