• 締切済み

EXCELVBAでデータをテキストファイルで出力したいと

EXCELVBAでデータをテキストファイルで出力したいと考えています。 ***************************** 作成したVBA ***************************** Sub test_Click() Dim fNAME As String fNAME = "c:\test.txt" Open fNAME For Output As #1 i = 1 Print #1, "<test=" & Cells(1, i) & "," & Cells(2, i) & "," & Cells(3, i) & "," & Cells(4, i) & "," & Cells(5, i) & ">" Close #1 '閉じる End Sub ***************************** エクセルの値 ***************************** A列 1 2 3 4 5 ***************************** 出力されたテキストファイル ***************************** <test=1,2,3,4,5> このようになっていますが、 エクセルが A列 1 2 のように、2個しかないと、 <test=1,2,,,> のようになってしまいます。 <test=1,2> ↑のようになるように、エクセルの値に応じて、 「,」が出力しないようにしたいです。 どうしたらよいのでしょうか。 よろしくおねがいします。

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

For文以外の方法ですと Replaceで置換でしょうね Dim ss as String ss = "<test=" & Cells(1, i) & "," & Cells(2, i) & "," & Cells(3, i) & "," & Cells(4, i) & "," & Cells(5, i) & ">" ss = Replace( ss, ",,", "" ) ss = Replace( ss, ",>", ">" ) print #1, ss といった具合です

smorgas030
質問者

お礼

回答ありがとうございます。 やってみたらうまくできました。 ありがとうございました。

  • qualheart
  • ベストアンサー率41% (1451/3486)
回答No.2

Sub test_Click() Dim fNAME As String fNAME = "c:\test.txt" Open fNAME For Output As #1 Dim tStr As String tStr = "<test=" & Cells(1, 1) i = 1 n = 2 Do While Cells(n, i) <> "" tStr = tStr & "," & Cells(n, i) n = n + 1 Loop tStr = tStr & ">" Print #1, tStr Close #1 '閉じる End Sub で、どうですか?

smorgas030
質問者

お礼

回答ありがとうございます。 やってみましたが、無限ループになってしまいました。 修正してみます。 他の方に別の回答をいただいたので、 とりあえず解決いたしました。 ありがとうございました。

  • hisajiro
  • ベストアンサー率37% (124/329)
回答No.1

そのソースではその結果になってしまいます。 for文を使ってみたらどうでしょうか? VBAでは入力されている最後のセル番号を取得できます。 for文で入力行数分回し、 ループ回数が0回でなければ","を出力し、 Cells(ループ回数, i)を出力していきます。 そうすれば余分なカンマが出ませんし、いくつ入力されていても対応できるようになります。

smorgas030
質問者

お礼

回答ありがとうございます。 FOR文を作成したことがありません。 恐縮ですが、 どのような感じのコードになるか教えていただくことは可能でしょうか。 よろしくおねがいます。

関連するQ&A