• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA 文字数の判定)

VBA文字数の判定方法とテキストファイルへの書き込み方法

このQ&Aのポイント
  • VBAを使用してテキストファイルの各行の文字数を判定する方法について教えてください。
  • また、100文字以上の行を別のファイルに書き込む方法も教えていただけますか?
  • 質問者は現在、VBAでテキストファイルを1行ずつ読み込んでいます。

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

  • ベストアンサー
  • spar
  • ベストアンサー率46% (35/75)
回答No.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

craftx
質問者

お礼

ありがとうございます。非常に参考になりました。

その他の回答 (3)

回答No.3

#2です。 間違った~~ b.txt のOpenを下記のように修正 Open "パス\b.txt" For Output As #fno2

craftx
質問者

お礼

ありがとうございます。非常に参考になりました。

回答No.2

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)
回答No.1

ヘタクソですが・・・こんな感じ? 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

craftx
質問者

お礼

ありがとうございます。 おかげさまで出力することができました。 補足質問ですが、毎回セーブしてクローズしたら処理に時間がかかりますので、 保存は一度のみとしたいのですが、どうすればよいでしょうか。 (ソースの場所を移動して試しましたが、エラーになりました。) また、a.txtの行をa.xlsに指定文字行だけにする というマクロですが、 バッチ形式みたいにバッチを実行するだけで処理することは可能でしょうか。 (excelのVBAエディタを立ち上げなくてもという意味です)

関連するQ&A

専門家に質問してみよう