プロが教えるわが家の防犯対策術!

エクセルのカンマ区切りのCSV出力について質問します。
CSVファイルとしてカンマ区切りで出力したいのですが、さらに各項目にダブルコーテーション(")をつけて出力したいのです。
例)
通常のCSV
01,02,03
やりたいCSV出力
"01","02","03"
ご存知の方がいらっしゃいましたら回答お願いします。

A 回答 (2件)

こんにちは。



簡単なマクロを作ってみました。ただし、これは、出力のみであって、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
'----------------------------------------------------------------
    • good
    • 0
この回答へのお礼

マクロですね。私も考えました。ありがとうございます。
エクセルの機能であるかと思い、質問させていただきました。
回答ありがとうございます。

お礼日時:2006/11/24 15:31

参考URLをご覧になってみてはいかがでしょうか?



参考URL:http://oshiete1.goo.ne.jp/qa1003287.html
    • good
    • 0
この回答へのお礼

参考になりました。ありがとうございます。

お礼日時:2006/11/24 15:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!