こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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列






*****************************
出力されたテキストファイル
*****************************
<test=1,2,3,4,5>

このようになっていますが、
エクセルが

A列



のように、2個しかないと、

<test=1,2,,,>

のようになってしまいます。

<test=1,2>

↑のようになるように、エクセルの値に応じて、
「,」が出力しないようにしたいです。
どうしたらよいのでしょうか。
よろしくおねがいします。

投稿日時 - 2007-11-20 15:36:22

QNo.3533425

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.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

といった具合です

投稿日時 - 2007-11-20 16:22:40

お礼

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

投稿日時 - 2007-11-26 13:07:58

ANo.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


で、どうですか?

投稿日時 - 2007-11-20 16:16:41

お礼

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

投稿日時 - 2007-11-26 13:07:24

ANo.1

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

投稿日時 - 2007-11-20 15:45:15

お礼

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

投稿日時 - 2007-11-20 16:05:35

あなたにオススメの質問