• ベストアンサー

ExcelのVBAでテキストファイルのAの文字列がある行とCの文字列がある行の間にBを追記したい

以下のプログラムを実行してs.txtを作成します。 Sub test() Open "C:\s.txt" For Output As #1 Print #1, "A" Print #1, "C" Close #1 End Sub これで1行目がA、2行目がCのテキストファイルが作成されます。 この作成したテキストファイルのAがある行とCがある行の間にBを追記し、 1行目 A 2行目 B 3行目 C このようにするにはどうすればよいのでしょうか? 使用OS:Windows XP 使用ソフト:Microsoft Excel 2003 ご存知の方がおられましたらご回答をよろしくお願いします。

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

  • ベストアンサー
  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.3

質問者の意図をそのまま実行するなら、 配列に読み込んで、ずらしてから書き込む。 昔、シーケンシャルファイルをよく扱ったことがあったが。 Sub test2() Dim s(20) as string,r as integer 'サイズは適当に合わせる Open "C:\s.txt" For Input As #1 r = 0 Do While Not EOF(1) r = r + 1 Line Input #1, s(r) If s(r - 1) = "A" And s(r) = "C" Then s(r + 1) = s(r) s(r) = "B" r = r + 1 End If Loop re = r Close #1 Open "C:\s.txt" For Output As #1 For r = 1 To re Debug.Print r, s(r) Print #1, s(r) Next Close #1 End Sub

nana_watuki
質問者

お礼

早速やってみたところ問題を解決することができました。 この方法だとシートに記述しなくて済むので処理が速くて良いですね。 ご回答していただきどうもありがとうございました。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

Sub test() Open "C:\s.txt" For Output As #1 Print #1, "A" Print #1, "C" Close #1 End Sub を書き込んだ(作成した)のはだれ?質問者ではないの。 本当はこんな単純な2行のファイルではないのでしょう。質問に降格と誤解を招く。知る人は知る、こんなコードを書いてもらわなくても 文章でわかる。 もし質問者なら、 Print #1, "A" Print #1, "B" Print #1, "C" として、作り直したらと言いたくなる。行数が多くて総和行かないのでしょう。だからこんな例は役立たない・。 少ないならエクセルに読み込ませ、Bの行を挿入し、データを入れて 保存するのが素人には早い。 テキストエディタ(メモ帳など)を使って挿入もでもできる。 ーー ヒントをもらっても出来ないレベルなら困るが   下記をEOFまで繰り返し   テキストファイルを読む(LiNInput#を使うが良さそう)   スペースとかでSplit、単項目ならそのままの値   X(0)(最初の区切りまで)か、または単項目の場合値がAなら、Aを書いて、次にBをファイルに書く   Aでなければ、そのまま書く。   この繰り返し ーー Googleで「テキストファイル 読む VBA」「テキストファイル 書く VBA」(またはVB)で照会すれば、コード例があるサイトが沢山出る。   

nana_watuki
質問者

お礼

ご回答いただきどうもありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 テキストファイルのインポートで、一旦、テキストバッファの変数に入れて、そこで調べて、出力するという方法もあるのですが、難しいことをせずに、Excelに出力して、表の中で処理したほうが早いのでは? Dim i As Long   For i = Range("A65536").End(xlUp).Row - 1 To 2 Step -1     If Cells(i - 1, 1).Value = "A" And Cells(i, 1).Value = "C" Then       Cells(i, 1).Insert       Cells(i, 1).Value = "B"     End If   Next なお、比較方法が、複雑な場合は、 Like 演算子のほうがよいかもしれません。 例: Cells(i - 1, 1).Value Like "A"

nana_watuki
質問者

お礼

Open "C:\s.txt" For Input As #1 Do Until EOF(1) Line Input #1, strData i = i + 1 Cells(i, 1).Value = strData Loop Close #1 For i = 1 To Range("A65536").End(xlUp).Row If Cells(i, 1).Value Like "A" Then Cells(i + 1, 1).Insert Cells(i + 1, 1).Value = "B" End If Next Open "C:\s.txt" For Output As #1 For i = 1 To Range("A65536").End(xlUp).Row Print #1, Cells(i, 1).Value Next Close #1 という風に一部を変更してやってみました。 ご回答いただきどうもありがとうございました。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

出来上がったテキストファイルを1行ずつ読み込み、 Aが含まれた行が読み込まれたらフラグを立て、別のテキストファイルに書き込む。 Cが含まれた行が読み込まれた時フラグが立っていれば、その行を書き込む前にBを含む行を書き込んでから、 Cを含む行を書き込む。 と言ったことをしていけばいいのでは?

nana_watuki
質問者

お礼

ご回答いただきどうもありがとうございました。

nana_watuki
質問者

補足

それをどのように記述すればよいのかがわかりません。

関連するQ&A