- ベストアンサー
エクセルのカンマ区切りのCSV出力
エクセルのカンマ区切りのCSV出力について質問します。 CSVファイルとしてカンマ区切りで出力したいのですが、さらに各項目にダブルコーテーション(")をつけて出力したいのです。 例) 通常のCSV 01,02,03 やりたいCSV出力 "01","02","03" ご存知の方がいらっしゃいましたら回答お願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
参考URLをご覧になってみてはいかがでしょうか?
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 簡単なマクロを作ってみました。ただし、これは、出力のみであって、CSVそのものを、そのままインポートすると、「"01","02","03"」は、「1,2,3」に戻ってしまいます。 以下の SWITCH の部分のパラメータによって、「""」の囲み方が変わります。 以下のマクロは、標準モジュールに取り付けると良いと思います。 標準モジュールへの取り付け方 Alt + F11 (Altを押しながらF11)を押すと、Visual Basic Editor 画面が出てきます。 次に、メニューの[挿入]-[標準モジュール]と開けて、クリックすると、画面が現れますので、以下のコードを貼り付けて、 Alt + Q で、画面を閉じます。 '---------------------------------------------------------------- Sub OutputCSV() 'CSV["" (クォーテーションマーク)]付き出力 Dim myFname As Variant Dim Fno As Integer Dim buf As String Dim i As Long Dim j As Long Const QT As String = """" '「""」を入れるかどうか '0 =すべて, 1 =書式文字列のみ, 2 =すべてない Const SWITCH As Integer = 0 '註:数値でも、'02 や書式文字列にしていれば、文字列として認識する myFname = Application.GetSaveAsFilename("", "テキスト ファイル (*.csv), *.csv") If myFname = False Then Exit Sub ElseIf Dir(myFname) <> "" Then If MsgBox("同じ名前のファイルがあります。上書きしますか?", vbQuestion) = vbCancel Then Exit Sub End If End If With ActiveSheet.UsedRange If WorksheetFunction.Count(.Cells) = 0 Then MsgBox "データが一つもありません。", vbCritical Exit Sub End If Fno = FreeFile Open myFname For Output As #Fno For i = 1 To .Rows.Count For j = 1 To .Columns.Count If Not IsEmpty(.Cells(i, 1).Value) Then If SWITCH = 0 Then buf = buf & "," & QT & .Cells(i, j).Text & QT ElseIf SWITCH = 1 Then If VarType(Cells(i, j).Value) = vbString Then buf = buf & "," & QT & .Cells(i, j).Text & QT Else buf = buf & "," & .Cells(i, j).Text End If Else buf = buf & "," & .Cells(i, j).Text End If End If Next j Print #Fno, Mid$(buf, 2) buf = "" Next i End With Close #Fno End Sub '----------------------------------------------------------------
お礼
マクロですね。私も考えました。ありがとうございます。 エクセルの機能であるかと思い、質問させていただきました。 回答ありがとうございます。
お礼
参考になりました。ありがとうございます。