- ベストアンサー
VBA CSV形式で保存したいのですが
EXCELで、以下のような表を作成してあります。 A B C 1 あ,10 2 い,20,100 3 う,30 4 え,40,200,か 5 お,50 A列にカンマを含めたデータが入っており、 1000行程度あります。 このようなデータをCSV形式で保存したいのですが、 単純にVBAを組むとそれぞれのデータが""で囲まれます。 また、上記例の3行目(以降)のデータの終わりに「,」が 出力されてしまいます。 例: あ,10 い,20,100 う,30, VBAで、 (1) ""で囲まれることなく、 (2) 行内のデータの個数によって,をつける位置を判断させて (3) セルに入っているカンマ区切りのデータをB列等に分離せずに 保存する方法はないでしょうか? ご教授、よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
CSVでは無理です。ていうか、「カンマで値を区切る」形式で値の中 にカンマが含まれてれば、区切りがおかしくならないように何らか の処置をするのがものの道理ってもんです。 テキスト形式(スペース区切り)あたりを使うのが妥当な線じゃない ですかね。xlFileFormatクラスでいうとxlTextPrinterかな。もちろ ん、ファイル名末尾を.csvなどと変えてからエクセルで開くなんて 無茶をしなければ、「B列等に分離」なんてことはありません。
その他の回答 (1)
- ham_kamo
- ベストアンサー率55% (659/1197)
SaveAsでもできるのですが、VBAで保存した後に自分自身のファイル名が *.xls から *.csv(あるいは *.txt など) に変わってしまうので、私は個人的にはあまり好きではありません。(SaveCopyAsでファイルフォーマットを選択できればいいのですが) 要はA列の内容をそのままテキストファイルに出力すればいいのだから、ファイルをオープンして書き込む方法をご紹介しておきます。 なお、このVBAでは XXX.xls を XXX.txt というファイル名で保存しています。 XXX.csv とすると、Excelで開くときに自動的にカンマでセルに分割されてしまいますが、XXX.txt なら、開くときに形式を選択できるからです。 Sub SaveAsTxt() Dim FName As String Dim n As Integer, i As Integer FName = Replace(ThisWorkbook.Name, ".xls", ".txt") n = FreeFile Open ThisWorkbook.Path & "\" & FName For Output As #n For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row Print #n, Cells(i, 1).Value Next Close #n End Sub
お礼
ご返答、ありがとうございます。 ご教授いただいた内容は、内容をよく理解し、 今後の自分の発展に役立てさせていただきます。 ありがとうございました。
お礼
ご返答、ありがとうございます。 ご教授いただいた内容でクリアできました。 ありがとうございました。