ここから本文です

VBAで分からないところがあります ソースは以下の通りです csvファイルを作成し...

out********さん

2014/12/613:22:27

VBAで分からないところがあります
ソースは以下の通りです
csvファイルを作成しています

Sub test01()

'Open "C:\Documents and Settings\xxxx\My Documents\aaa9.csv" For Output As #1 '保存先記入
Open "C:\Documents and Settings\2014\Desktop\pos2.csv" For Output As #1 '保存先記入

d = Range("A65536").End(xlUp).Row'範囲選択のため
For i = 1 To d '行の繰り返し
s = ""
For j = 1 To 10 '列の繰り返し
If Cells(i, j) = "" Then Exit For 'もしセルが空白だったら
s = s & Cells(i, j) & "," '左から順にコンマをつけながら連結
Next j
Print #1, Left(s, Len(s) - 1)
Next i
Close #1
End Sub

'***メモ***
'Exit Forを使用するとNextの次の行にジャンプ
'Left("文字列",取り出す文字数)
'Print #filenumber,[outputlist]
'filenumberには、任意のファイル番号を指定。
'outputlistには、出力するデータを指定。
'出力モードで開いたファイルに、データを書き込む

For j = 1 To 10 '列の繰り返し
If Cells(i, j) = "" Then Exit For 'もしセルが空白だったら
s = s & Cells(i, j) & "," '左から順にコンマをつけながら連結
Next j
Print #1, Left(s, Len(s) - 1)

この部分で何をやっているのかよくわかりません
もし空白だったら最初の,(カンマ)を消しているということでしょうか?

また、Print #1などの#1とはどう意味でしょうか?
調べたところ、任意のファイル番号とありましたが理解できませんでした。
お願いします

閲覧数:
128
回答数:
2
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

tra********さん

2014/12/615:30:19

>もし空白だったら最初の,(カンマ)を
>消しているということでしょうか?
i行中のA~J列のセル値を「,」で区切って繋げているということになります。
A~J列まで処理の対象にしてますが、途中で空白セルがみつかれば、For j = 1 ~Nextを抜け、CSVファイルの出力が行われます。

>#1とはどう意味でしょうか?
テキストファイルをVBAで扱う場合、それらのファイルに番号を付番して、認識させす。その番号です。
ここ
http://officetanaka.net/excel/vba/file/file08.htm
が詳しいので参照してください。

質問した人からのコメント

2014/12/9 12:28:33

降参 丁寧な回答感謝です!

ベストアンサー以外の回答

1〜1件/1件中

dam********さん

2014/12/705:18:18

最初じゃなくて最後のカンマを消してるんだよ。
lenで長さを出してマイナス1した結果をleftでとってるでしょ。
わからないなら、試しに「Print #1, Left(s, Len(s) - 1)」を
「Print #1, s」に変えてみれば良いよ。右に余計なカンマが付くから。

空白の条件は横(列)のループの終わりを判断してるだけでカンマは全く関係ない。
こっちも「If Cells(i, j) = "" Then Exit For」を消して出来上がったファイルを見れば何やってるかわかるよ。
ファイルの説明は他の人の回答の通り。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる