- ベストアンサー
ExcelのCSV形式について
ExcelデータをCSV形式で保存するとき文字列はダブルコーテーション、数字列はそのままでカンマ区切りしたいです。確か123のCSV形式はそうなってたと思います。お手数ですが御回答、宜しくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
「標準モジュール」に貼り付けることを想定して作りました。 ActiveSheet の UsedRange を取るように作られています。 「超便利CSVコンバーター 」のHPで、私のと仕上がりを比較してみましたが、こちらの試験では、同じように仕上がります。私のコードの中で、多少、気がかりな部分もありますが、これだけしたら、何も難しいことはしていませんので、内容的には簡単な部類だと思います。 Sub CsvOutWithQuatation() Dim objFs As Object Dim objText As Object Dim Rng As Range Dim DataRow As Long Dim DataCol As Integer Dim i As Long, j As Long Dim buf As String Dim myCsv As String Const QT As String = """" 'クォーテーション Const sep As String = "," 'コンマ切り Const Ext As String = ".csv" '拡張子 Dim myPath As String Set objFs = CreateObject("Scripting.FileSystemObject") Set Rng = ActiveSheet.UsedRange DataRow = Rng.Rows.Count DataCol = Rng.Columns.Count myPath = ThisWorkbook.Path & "\" 'マクロのブックのパスと同じ場所 If Application.CountA(Rng) <= 1 Then MsgBox "データが1つか、空です", 16 Exit Sub End If Do myCsv = Application.InputBox("ファイル名を入れてください", Type:=2) If myCsv = "False" Or myCsv = "" Then Exit Sub Else If InStr(myCsv, Ext) = 0 Then myCsv = myCsv & Ext End If End If If Dir(myPath & myCsv) <> "" Then MsgBox "同名のファイルが既にあります", 16 End If Loop Until Dir(myPath & myCsv) = "" Set objText = objFs.CreateTextFile(myPath & myCsv) For i = 1 To DataRow If VarType(Rng.Cells(i, 1)) = vbString Then buf = QT & Rng.Cells(i, 1).Value & QT Else buf = Rng.Cells(i, 1).Value End If For j = 2 To DataCol If VarType(Rng.Cells(i, j)) = vbString Then buf = buf & sep & QT & Rng.Cells(i, 1).Value & QT Else buf = buf & sep & Rng.Cells(i, j).Value End If Next j objText.WriteLine (buf) Next i Set Rng = Nothing Set objText = Nothing Set objFs = Nothing Beep '終了したら、音がなります。 End Sub
その他の回答 (1)
- mshr1962
- ベストアンサー率39% (7417/18945)
Windowsのcsv形式はダブルコーテーションに対応してないので保存時の設定で行うのはできないと思います。 シェアウェアですが下記のようなソフトがありますが... 超便利CSVコンバーター http://www.vector.co.jp/soft/win95/business/se236008.html
お礼
参考にさせていただきます。ありがとうございます。
お礼
詳しくありがとうございます。