- ベストアンサー
【VBA】ExcelマクロでCSVファイルに保存したデータが""で囲まれてしまう
添付図のような、Excel2003で作成した表内のデータを CSVで保存するマクロを作成したのですが、 図のように、CSVファイルに「""」で値が囲まれた状態で、 保存されてしまいます。 下記にマクロを記載しますので、 どうすれば文字列が「""」で囲まれずに、 カンマ区切りだけのデータで出力されるのか、 ご存知の方おられましたら、ご教示お願い致します。 Sub csv保存() Dim フォルダ名 As String Dim パス名 As String Dim ファイル名 As String Dim データ As Variant Dim 行数 As Long, 列数 As Integer Dim i As Integer, j As Long, k As Long ファイル名 = "test.csv" フォルダ名 = "csv" パス名 = ActiveWorkbook.Path & "\" & _ フォルダ名 'csvフォルダが存在しなければ作成する If Dir(パス名, vbDirectory) = "" Then MkDir パス名 End If ChDir パス名 Open ファイル名 For Output As #1 For i = 1 To Worksheets.Count Worksheets(i).Activate Worksheets(i).Cells(1, 1).Select ActiveCell.CurrentRegion.Select 行数 = Selection.Rows.Count 列数 = Selection.Columns.Count For j = 1 To 行数 For k = 1 To 列数 - 1 データ = Selection.Cells(j, k) _ .Value Write #1, データ; Next k Write #1, Selection.Cells(j, 列数) _ .Value Next j Next i Close #1 End Sub
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Write # は文字列を""で囲んで出力する仕様になっています。 そのまま出力したければ、Print #を利用すればよろしいかと。 ただし、Printの場合は区切り文字(カンマ)を自動で出力してくれませんので、併せて出力する必要があります。 For j = 1 To 行数 For k = 1 To 列数 - 1 データ = Selection.Cells(j, k) .Value Print #1, データ; ","; Next k Print #1, Selection.Cells(j, 列数).Value Next j なお、いらぬおせっかいですが、ドライブが複数ある環境下だと、 ChDir パス名 だけでは必ずしもcvsフォルダ内に、ファイルが作成されるとは限りません。 Open パス名 & "\" & ファイル名 For Output As #1 のように、フルパスで指定しておいた方が確実かと…
その他の回答 (1)
- redfox63
- ベストアンサー率71% (1325/1856)
For j = 1 To 行数 For k = 1 To 列数 - 1 データ = Selection.Cells(j, k).Value ' Write #1, データ; Print #1, データ; Next k ' Write #1, Selection.Cells(j, 列数).Value Print #1, Selection.Cells(j, 列数).Value Next j といった具合に 『Write』を『Print』変更してみましょう
お礼
ご回答ありがとうございます。 Printに変更したところ、確かに「""」が出力されませんでした。
お礼
ご回答ありがとうございます。 Printとカンマを手動で出力することで、 期待動作をさせることが出来ました。 >必ずしもcvsフォルダ内に、ファイルが作成されるとは限りません。 そうなのですね。。全く考慮していませんでした。 是非反映させたいと思います。