- ベストアンサー
VBA文字数の判定方法とテキストファイルへの書き込み方法
- VBAを使用してテキストファイルの各行の文字数を判定する方法について教えてください。
- また、100文字以上の行を別のファイルに書き込む方法も教えていただけますか?
- 質問者は現在、VBAでテキストファイルを1行ずつ読み込んでいます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
これでいいかな? かなり単純に作っています(これくらいの知識しかないんで・・・) 再びVBEを開かずにってお話ですが、それは文字数や文字列などを毎回打ち替えずに任意に指定したいという意味ですか? 例えばInputBoxを使って文字数を指定するとか・・・? Sub test() Dim buf As String, n As Long, r As Long, Moji As Integer Dim wb1 As String, wb2 As String Application.ScreenUpdating = False wb1 = ThisWorkbook.Name Workbooks.Open "パス\a.xls" wb2 = ActiveWorkbook.Name Open "パス\a.txt" For Input As #1 Do Until EOF(1) Line Input #1, buf Moji = Len(buf) If Moji >= 100 Then Windows(wb2).Activate r = r + 1 Cells(r, 1) = buf End If Windows(wb1).Activate n = n + 1 Cells(n, 1) = buf Loop Close #1 Windows(wb2).Activate ActiveWorkbook.Save Workbooks("a.xls").Close Application.ScreenUpdating = False End Sub
その他の回答 (3)
- Hayashi_Trek
- ベストアンサー率44% (366/818)
#2です。 間違った~~ b.txt のOpenを下記のように修正 Open "パス\b.txt" For Output As #fno2
お礼
ありがとうございます。非常に参考になりました。
- Hayashi_Trek
- ベストアンサー率44% (366/818)
a.txt から b.txt に移す例 Sub test() 'a.txtの中で100文字以上の行をb.txtに出力する。 Dim buf As String Dim fno1 As Integer Dim fno2 As Intgere fno1 = FreeFile Open "パス\a.txt" For Input As #fno1 fno2 = FreeFile Open "パス\b.txt" For Input As #fno2 Do Until EOF(fno1) Line Input #fno1, buf If 100 < Len(buf) Then Print #fno2, buf End If Loop Close fno1 Close fno2 End Sub
- spar
- ベストアンサー率46% (35/75)
ヘタクソですが・・・こんな感じ? Sub test() Dim buf As String, n As Long, r As Long, Moji As Integer Open "パス\a.txt" For Input As #1 Do Until EOF(1) Line Input #1, buf Moji = Len(buf) If Moji >= 100 Then Workbooks.Open "パス\a.xls" r = r + 1 Cells(r, 1) = buf ActiveWorkbook.Save Workbooks("a.xls").Close End If n = n + 1 Cells(n, 1) = buf Loop Close #1 End Sub
お礼
ありがとうございます。 おかげさまで出力することができました。 補足質問ですが、毎回セーブしてクローズしたら処理に時間がかかりますので、 保存は一度のみとしたいのですが、どうすればよいでしょうか。 (ソースの場所を移動して試しましたが、エラーになりました。) また、a.txtの行をa.xlsに指定文字行だけにする というマクロですが、 バッチ形式みたいにバッチを実行するだけで処理することは可能でしょうか。 (excelのVBAエディタを立ち上げなくてもという意味です)
お礼
ありがとうございます。非常に参考になりました。