dポイントプレゼントキャンペーン実施中!

EXCELで、セルの内容をVBAでCSVにしたいのですが・・・

Dim S As String, I As Integer, D As Date
I = 123
S = "文字"
D = 2005/3/18
Open ・・・
Write #1, I, S, D
Close ・・・
とすると、
123,"文字",#2005-03-18# ・・・ となります。
123,"文字",2005/03/18 ・・・ とするには、何か方法ありますか?

また、文字の前後についている、"(ダブルコーテーション)を外して、
123,文字,2005/03/18 ・・・ とは出来ませんでしょうか?

A 回答 (4件)

Dは文字列型にしました。


またTextStreamに書き込むためにFSとAという
変数を追加しました。

  Dim S As String, I As Integer, D As String
  Dim Fs As Object, A As Object
  Set Fs = CreateObject("Scripting.FileSystemObject")
  Set A = Fs.CreateTextFile("c:\testfile.txt", True)
  I = 123
  S = "文字"
  D = "2005/3/18"

  A.WriteLine (I & "," & S & "," & D)
  A.Close
    • good
    • 0
この回答へのお礼

回答、ありがとうございます。

この通りにやってみたら、望みのことが出来ました。

ありがとうございました。

お礼日時:2005/03/18 13:53

>また、文字の前後についている、"(ダブルコーテーション)を外して、



以下のコードでは、ダブルコーテーションが必要な場所には付与されますが、それはCSVを正しく出力するために必要があるからです。例えば、改行コードを含むデータをCSV出力すると、このダブルコーテーションが無いとうまく出力されません。

コードですが、勿論 Open で開いて一行ずつ処理していってもOKなのですが、EXCELにはCSV出力機能があるのだから、これを利用しました。コードが単純化されます。
また、処理件数が多い場合、VBAで自力でゴリゴリやるよりは、コンパイルされたEXCELの機能を利用する方が高速です。

Sub EXPORT_CSV()

  Dim TargetArea As Range
  Dim WB As Workbook
  
  '対象範囲を定義
  Set TargetArea = Sheets("Sheet1").Range("A1:E50")
  
  '新規ブック追加
  Set WB = Workbooks.Add
  'コピー
  TargetArea.Copy Destination:=WB.Sheets(1).Range("A1")
  'CSVで保存
  sFileName = Application.GetSaveAsFilename( _
    FileFilter:="CSVファイル (*.csv), *.csv")
  If sFileName <> "" And sFile <> "False" Then
    WB.SaveAs Filename:=sFileName, FileFormat:=xlCSV
    Application.DisplayAlerts = False
    WB.Close
  End If

End Sub
    • good
    • 0
この回答へのお礼

回答、ありがとうございます。

そうですね、EXCELの基本機能を使うのも手ですね。

いろいろ勉強してみます。

お礼日時:2005/03/18 16:31

セルから値を取ることを想定して作りました。



Sub CSV_Export()
Dim myFno As Integer
Dim myLastRow As Long
Dim i As Long
Const myTXTcsv As String = "C:\My Documents\Excel\Test1.csv" '出力ファイル名
myLastRow = Range("A1").CurrentRegion.Rows.Count
'アクティブセルのA1 を基点としています。A1 が基点でない場合
'修正するから、行の数字を入れてください。
'
'Const QT As String = """" 'これを外せば、 _
"文字にクォーテーションマークが入ります。"
myFno = FreeFile
Open myTXTcsv For Output As #myFno

For i = 1 To myLastRow
   Print #myFno, Cells(i, 1).Text & "," & _
          QT & Cells(i, 2).Text & QT & "," & _
          Cells(i, 3).Text
  
Next
  Close #myFno
End Sub

一応、私もprint で作ってみました。
    • good
    • 0
この回答へのお礼

回答、ありがとうございます。

いろいろ方法があるものですね。

Print文と、Write文の使い分けが必要ですね。

昔の人間なので、LEVEL1-Basic(死語?)の時代の
うる覚えの知識を酷使して書いてます。

ありがとうございました。

お礼日時:2005/03/18 13:57

試してないのですが


Print #1,I,S,D
じゃだめですか?
    • good
    • 0
この回答へのお礼

回答、ありがとうございます。

Print文で実験してみました。
項目と項目の間に、スペースが空いてしまいました。
,(カンマ)ではなく、;(セミコロン)にしたら、
間隔がなくなりました。
これもうまくやれば使えそうですね。

ありがとうございました。

お礼日時:2005/03/18 13:55

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