アプリ版:「スタンプのみでお礼する」機能のリリースについて

ExcelでCSVファイルに出力する時に、データをダブルクヲーテションでくくったファイル形式にしたいのですが、可能でしょうか、教えてください。

A 回答 (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
    • good
    • 0
この回答へのお礼

有難うございます、私もVBAの勉強をしようかなと思います。

お礼日時:2002/06/28 12:05

私も必要だったのですが、調べてもできなかったのです。

しようが無いので、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
    • good
    • 0
この回答へのお礼

早速に有難うございます、実は郵政省のハイブリッドメールを利用したいと思い、CSVに書き出したのですが、これをExcelで読むと、地番項目例えば1-2-3がの日付形式やシリアル形式になってしますので、研究中です。

お礼日時:2002/06/28 12:09

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