• ベストアンサー

CSVファイルへの文字列データの書き出しについて

OS:WindowsXP、Excel:2003 です。 Excelマクロ(VBA)で、あるデータをCSVファイルに出力しているのですが、 文字列型(String)を書き出すと、必ずダブルクォーテーションで囲まれます。 CSVへ書き出すときは、そういう仕様になっているということは分かったのですが、 処理の都合上、どうしてもダブルクォーテーションで囲まずに書き出ししたいと思っています。 そういう場合にはどのようにすれば良いのか教えて下さい。 ちなみに、書き出しは「Write」を使っています。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

Write# ステートメントはDOS-BASIC時代からあり、文字列は””で囲むが標準方式であった時代は使っていたものです。今はよく使われるのはどの方式なんでしょうか。 下記はAーE5列の例です。(これもEnd(xlToLeft)で察知にできますが略。) Sub test01() d = Range("A65536").End(xlUp).Row Open "C:\Documents and Settings\XXXXX\My Documents\testc.csv" For Output As #1 For i = 1 To d For j = 1 To 5 If j < 5 Then Print #1, Cells(i, j) & ","; Else Print #1, Cells(i, j) End If Next j Next i Close #1 End Sub で 0,sdfg,7,10, 0 2,5,8,11, 0 3,cvb,9,12, 0 4,0,0,a,f 5,0,0,s, 0 になりました。0の前のスペースが気になるのですが、Trim()をCells()にかぶせるとか。 参考にしてください。

cacancan
質問者

お礼

ご回答いただきありがとうございました。 アドバイス通り、 (前)write #intFF, intCode, strName, intNo,・・・  ↓ (後)print #intFF, intCode & "," & Trim(strName) & "," & ・・・ と変更したところ、理想通りの出力になりました。 本当にありがとうございました☆

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

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。#2 の Wendy02です。 >WriteとPrintの違いがいまいちよく分からないのですが、 >Writeだとカンマ区切りでの出力になり、 >Printでは区切りがないという理解でよいのでしょうか? それはそうなんですが、コード全体の考え方が違います。 以下は、最も簡単な例ですが、以下のように、ループで、buf に溜めておいてから、出力するという方法を取ります。つまり、もしも、文字列のみに、クォーテーションをつける時などは、QT="""" などと変数を置いて、囲んで出力させます。ですから、圧倒的に、Print ステートメントで出力するほうが多いです。 Sub OutPutCsv() Dim rng As Range Dim r As Variant Dim i As Long Dim buf As String Dim Fno As Integer Const FNAME As String = "myCsv1.csv" Set rng = Range("A1").CurrentRegion Fno = FreeFile() Open FNAME For Output As #Fno For Each r In rng.Rows For i = 1 To r.Columns.Count  buf = buf & "," & r.Cells(1, i).Value Next  If Len(buf) > 1 Then   Print #Fno, Mid$(buf, 2)  End If  buf = "" Next r Close #Fno MsgBox "出力しました。!" End Sub ※ただし、実際のコードは、もう少し複雑になることが多いです。

cacancan
質問者

お礼

ご回答ありがとうございました! printステートメントでは1行分を一気に出力する、という使い方をするんですね。 そのほうが処理速度があがりそうですね。 ありがとうございました☆

すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

WSH のTextStream の Write または WriteLine を使う

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

こんにちは。 Write ステートメントで、カンマ区切りはしていらっしゃると思いますから、後は、Print ステートメントに換えてください。

cacancan
質問者

お礼

ご回答ありがとうございました。 writeステートメントを単純にPrintステートメントに変更しただけでは出力形式が変わってしまいましたが、 少し処理をはさむことで、うまく出力されました。 ありがとうございます! ところで、WriteとPrintの違いがいまいちよく分からないのですが、 Writeだとカンマ区切りでの出力になり、 Printでは区切りがないという理解でよいのでしょうか?

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

>文字列型(String)を書き出すと、必ずダブルクォーテーションで囲まれます。 少なくとも私の知る限り、ダブルクォーテーションで囲まれる文字列は、セル内に改行を含むものだけのようです。もしそのとおりであれば、セル内の改行を取り除けばよいと考えられます。 検索と置換によりセル内の改行(ctrl+J)を代用文字に全置換し、エクスポートした後に、代用文字をインポート先のフィールド内改行文字(アプリケーションによって異なります)に置換すればよいと思われます。 はずれでしたらごめんなさい。

cacancan
質問者

お礼

ご回答いただきありがとうございます。 せっかくお答えいただいたのですが、 今回のデータは別ファイルから読み込んできたものを加工して書き出すものですので、 直接セルのデータを扱うものではありません。 説明不足で非常に申し訳ございませんでした。 ありがとうございました。

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

関連するQ&A

専門家に質問してみよう