Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3356 / 13646 ツリー ←次へ | 前へ→

【62682】CSVにダブルコーテーションをつけて保存する ともちゃ 09/8/23(日) 16:01 質問[未読]
【62683】Re:CSVにダブルコーテーションをつけて保存... kanabun 09/8/23(日) 16:46 発言[未読]
【62694】Re:CSVにダブルコーテーションをつけて保存... ともちゃ 09/8/24(月) 23:59 お礼[未読]
【62695】Re:CSVにダブルコーテーションをつけて保存... kanabun 09/8/25(火) 0:16 発言[未読]
【62758】Re:CSVにダブルコーテーションをつけて保存... ともちゃ 09/8/27(木) 21:58 お礼[未読]

【62682】CSVにダブルコーテーションをつけて保存...
質問  ともちゃ  - 09/8/23(日) 16:01 -

引用なし
パスワード
   はじめまして。ともちゃと申します。

VBA初心者で、可能な操作なのかもわかりませんがご教授お願いします。

例えば、エクセルに

A列  B列
東京  12345
京都  67890

という内容があったとして、これをダブルコーテーションをつけて、CSVで保存したいのです。

しかし、以下のようにエクセルファイルを変更すると、

A列   B列
"東京"  "12345"
"京都"  "67890"

CSV上で、
"""東京""","""12345"""
"""京都""","""67890"""

と保存されてしまいます。
うまく保存する方法がありましたら、ご教授いただけないでしょうか。
よろしくお願いいたします。

【62683】Re:CSVにダブルコーテーションをつけて保...
発言  kanabun  - 09/8/23(日) 16:46 -

引用なし
パスワード
   ▼ともちゃ さん:

>これをダブルコーテーションをつけて、CSVで保存したいのです。

Write# で出力してみてはいかがでしょう
Write#ステートメントを使うと、値が文字列であればダブルコーテーション
で囲んで出力されます。また、データの区切りのカンマも自動で付けられます。

Sub ともちゃCSV出力()
 Dim v
 Dim io As Integer
 Dim 出力ファイル名 As String
 Dim i As Long, j As Long, jmax As Long
 
 v = ActiveSheet.UsedRange.Value '出力範囲を配列に入れる
 jmax = UBound(v, 2)   '出力列数
 io = FreeFile()     'I/O ファイル番号
 '← ここで出力ファイル名のセットをしてください
 Open 出力ファイル名 For Output As io
 For i = 1 To UBound(v)
   For j = 1 To jmax - 1
     Write #io, v(i, j);
   Next
   Write #io, v(i, jmax)
 Next
 Close io
 
End Sub

【62694】Re:CSVにダブルコーテーションをつけて保...
お礼  ともちゃ  - 09/8/24(月) 23:59 -

引用なし
パスワード
   ▼kanabun さん:

ご回答ありがとうございます!
Writeを使うと、文字列であれば、自動でダブルクォーテーションが付くんですね。

早速試してみたいと思います。
お返事おそくなり申し訳ありませんでした。

【62695】Re:CSVにダブルコーテーションをつけて保...
発言  kanabun  - 09/8/25(火) 0:16 -

引用なし
パスワード
   ▼ともちゃ さん:

>Writeを使うと、文字列であれば、自動でダブルクォーテーションが付くんですね。

はい、そうです。
以下のようなワークシートセルデータのとき、

> A列   B列
> 東京  12345
> 京都  67890

A列データは明らかに「文字列」だからいいのですが、
心配なのは B列のデータです。

これは見かけ数値のように見えるけど、データ型は文字列型
なんですか?
そうでないと、 Write#ステートメント使っても、

 "東京",12345
 "京都",67890

のようにしか出力されないと思います。

いや、数値データにもダブルクォートを付すのだ、問答無用で!
というときには、

 For i = 1 To UBound(v)
   For j = 1 To jmax - 1
     Write #io, CStr(v(i, j));
   Next
   Write #io, CStr(v(i, jmax))
 Next

としてください。
そうすると全てのデータにダブルクォートが付きます。

同時に、あとで他のアプリから読もうとするときに、
文字列データと数値データの区別がつかなくて困った
ことになりますので、くれぐれもお気を付けください。

では(^^

【62758】Re:CSVにダブルコーテーションをつけて保...
お礼  ともちゃ  - 09/8/27(木) 21:58 -

引用なし
パスワード
   ▼kanabun さん:

本日試してみましたが、驚くほどにうまくいきました!
本当にありがとうございます。

文字列の件は、全セルにシングルコーテーションをつけて対応しました。
あまりかっこよくないですけど・・・


この度は本当に助かりました。
重ねてお礼申し上げます。

3356 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free