- ベストアンサー
Excelで”データ”形式のCSVが作れますか
ExcelでCSVファイルに出力する時に、データをダブルクヲーテションでくくったファイル形式にしたいのですが、可能でしょうか、教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Excelの機能では、『,』で区切ったcsvファイルしかできません。 質問にあるように、『"』で囲ったcsvファイルを作れるようにしてみました。 ただし、長くなるので、Excelの機能で『,』で区切っただけのcsvファイルを『"』で囲むように書き換えるようにしてみました。 全てをExcelVBAで書けましたが、使用環境、Bookの構造、Bookの重要度など不明なので、一旦作ったcsvファイルを書き換えるようにしています。 ツール→マクロ→Visual Basic Editor でVBE画面に移り、挿入→標準モジュール で標準モジュールを挿入します。出てきたコードウインドウに下記マクロをコピーして貼り付けます。(新規Bookでかまいません) 操作手順は、シートに戻り、 1.ツール→マクロ→マクロ でCSVchangeを実行。 2.元のcsvファイルを選択する。 3.元のcsvファイルがあったフォルダに、"chg"+元のcsvファイル名 の新ファイルが作成されます。 ご参考に。 Sub CSVchange() Dim csvFL1 As Variant '元のCSVファイル Dim csvFL2 As String 'ダブルクオテーションで囲んだCSVファイル Dim rec As String 'CSVファイルの1行 Dim FLNo1 As Integer 'ファイル番号 Dim FLNo2 As Integer 'ファイル番号 Dim dq As String 'ダブルクオテーション dq = Chr(&H22) '元のcsvファイルを選択する Dim myTitle As String 'タイトル Dim myFilter As String '保存ファイル名 myTitle = "変換するcvsファイル名を指定します" myFilter = "csvFile(*.csv),*.csv" csvFL1 = Application.GetSaveAsFilename(FileFilter:=myFilter, Title:=myTitle) If csvFL1 = False Then Exit Sub '書き換えるcsvファイル名を自動で決める。(chg + 元のファイル名にする) Dim pot As Integer Dim L As Integer For L = Len(csvFL1) To 1 Step -1 If Mid(csvFL1, L, 1) = "\" Then pot = L: Exit For End If Next csvFL2 = Left(csvFL1, pot) & "chg" & Right(csvFL1, Len(csvFL1) - pot) 'ファイルを開く FLNo1 = FreeFile: Open csvFL1 For Input As #FLNo1 FLNo2 = FreeFile: Open csvFL2 For Output As #FLNo2 '書き換える While Not EOF(FLNo1) Line Input #FLNo1, rec Print #FLNo2, dq & Application.Substitute(rec, ",", dq & "," & dq) & dq Wend Close MsgBox "終了しました" End Sub
その他の回答 (1)
- sarudoshi
- ベストアンサー率42% (9/21)
私も必要だったのですが、調べてもできなかったのです。しようが無いので、VBAで作成しました。よろしければ使ってください。VBAは全くの独学ですので、お見苦しい点もあるかと思います。 一応A列からG列を対象としています。7行目のForの制御変数の開始と終了を変えれば良いです。例えば、C列からI列が対象の場合はj=3 To 9とすればよいです。また、出力ファイル名は2行目のコーテーションマークの中を変更すれば、変えられます。 詳しい説明が必要ならば、補足してください。ある程度VBAの分かる方なら、容易に理解できると思います。 Sub write_csv_with_quote() Open "c:\csvfile.csv" For Output As #1 ' i = 1 Do While Cells(i, 1) <> "" csv_text = "" For j = 1 To 7 If j > 1 Then csv_text = csv_text & "," End If csv_item = Chr(34) & Cells(i, j) & Chr(34) csv_text = csv_text & csv_item Next Print #1, csv_text i = i + 1 Loop ' Close #1 End Sub
お礼
早速に有難うございます、実は郵政省のハイブリッドメールを利用したいと思い、CSVに書き出したのですが、これをExcelで読むと、地番項目例えば1-2-3がの日付形式やシリアル形式になってしますので、研究中です。
お礼
有難うございます、私もVBAの勉強をしようかなと思います。