• ベストアンサー

EXCELのVBAで

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 ・・・ とは出来ませんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • stouma
  • ベストアンサー率35% (142/399)
回答No.1

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

SHINYA-W
質問者

お礼

回答、ありがとうございます。 この通りにやってみたら、望みのことが出来ました。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

>また、文字の前後についている、"(ダブルコーテーション)を外して、 以下のコードでは、ダブルコーテーションが必要な場所には付与されますが、それは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

SHINYA-W
質問者

お礼

回答、ありがとうございます。 そうですね、EXCELの基本機能を使うのも手ですね。 いろいろ勉強してみます。

すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

セルから値を取ることを想定して作りました。 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 で作ってみました。

SHINYA-W
質問者

お礼

回答、ありがとうございます。 いろいろ方法があるものですね。 Print文と、Write文の使い分けが必要ですね。 昔の人間なので、LEVEL1-Basic(死語?)の時代の うる覚えの知識を酷使して書いてます。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • anagotan
  • ベストアンサー率0% (0/1)
回答No.2

試してないのですが Print #1,I,S,D じゃだめですか?

SHINYA-W
質問者

お礼

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

すると、全ての回答が全文表示されます。

関連するQ&A