こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

Excel VBAでのテキスト出力について

excel vbaでの文字列出力について

エクセルからテキスト(メモ帳とか)に出力したいのですが
下記のように出力できなくて困っております。
どなたか教えてほしいです。
●入力エクセル
AAA BBB CCC DDD EEE
セル(1,1)~(1,5)にそれぞれ文字列が入っている状況です。

これを下記のように出力したいのです。

●テキスト出力
"AAA","BBB",CCC,"DDD",EEE
CCCとEEEをダブルクォーテーションを付けないで出力したいのです。

出力の方法でwriteとprintがありますが

writeで
Write #1, Cells(1,1),Cells(1,2),Cells(1,3),Cells(1,4),Cells(1,5)
やると、自動で全ての文字がダブルクォーテーションで囲まれて、カンマが自動でつき
"AAA","BBB","CCC","DDD","EEE"
のようになってしまします。CCCとEEEのダブルクォーテーションが不要です。

printで
Print #1, CStr(Cells(1,1)), & "," CStr(Cells(1,2)), & "," Cells(1,3), & "," CStr(Cells(1,4)), & "," Cells(1,5)
とすると
"AAA", "BBB", CCC, "DDD", EEE
となり、カンマの後ろに空白が何個か入った状態になります。
(ブラウザでは空白が分かりづらいですが、テキストですと入っております。)
Trim関数でTrim(",")とか色々試しましたが上手くいきません。

どうしたら望み通りの出力ができるでしょうか。

ぜひ教えて頂きたいです。

よろしくお願いします。

投稿日時 - 2015-06-16 00:03:10

QNo.8995053

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

(1)Functionを1個作って、

'--- ダブルコーテーションで囲む関数
Function DqAdd(ByVal pstrValue As String)

DqAdd= """" & pstrValue & """"

End Function


(2)ダブルクォーテーションで囲みたいものだけ関数に渡せばOK

Print #1, DqAdd(Cells(1, 1)) & "," & DqAdd(Cells(1, 2)) & "," & Cells(1, 3) & "," & DqAdd(Cells(1, 4)) & "," & Cells(1, 5)

投稿日時 - 2015-06-16 15:27:36

ANo.4

データ例 A2:E4
aa1bb1cc1dd1ee1
aa2bb2cc2dd2ee2
aa3bb3cc3dd3ee3
コード
標準モジュールに
Sub test01()
Close #1
Open "test616.txt" For Output As #1
lr = Range("a" & 65536).End(xlUp).Row
'MsgBox lr
For i = 2 To lr
stro = ""
For j = 1 To 5
stro = stro & Cells(i, j) & ","
Next j
'MsgBox Len(stro)
stro = Left(stro, Len(stro) - 1)
'MsgBox stro
Print #1, stro
Next i
End Sub
メモ帳で、表示操作して確認
aa1,bb1,cc1,dd1,ee1
aa2,bb2,cc2,dd2,ee2
aa3,bb3,cc3,dd3,ee3
>テキスト(メモ帳とか)に出力したいのですが
VBAではメモ帳を操作できないので
「テキスト(メモ帳とかで表示できる内容)に出力したいのですが」というべきかと思う。
メモ帳でみて、それに最終形が、カンマ区切りでよいのかな。はっきり書いてない。
昔から(Dos時代、Basic)の伝統で、標準のテキストファイルの形式として、「文字列をダブルクォーテーションで囲む」形式はあるよ。
(1)すべての項目(エクセルの列データに当たる)をダブルクォーテーションで囲む
(2)文字列項目だけ囲む
(3)数字項目も文字項目も囲まない
数値項目と文字列項目を峻別していたように思う。
最近では(3)を多く目にするようだ。どれでも読み込むソフト(市販)やプログラムにステートメントがあるのが多いと思うよ。
それにセパレーター(区切り文字)は、「1」カンマ、「1」スペース、「1」タブ、位置ぞろえのための複数スペースなどあるよね。

投稿日時 - 2015-06-16 09:57:58

ANo.3

データ数が少ない場合は、質問の様な記載方法でも良いのですが、データ数が多くなったり2次配列にしたい場合はループ処理が必要となります。
for~nextでセルデータを出力するVBAの一例です。

Sub TEST()

Dim filePath As String
Dim i As Long
Dim maxRow As Long
Dim fileNo As Integer

filePath = "C:\dumy\data.csv"
fileNo = FreeFile

Open filePath For Output As #fileNo

With Sheets("sheet1")

For i = 1 To 5
If i < 5 Then
Print #fileNo, Cells(i, 1);
Print #fileNo, ",";
Else
Print #fileNo, Cells(i, 1)
End If

Next i

End With

Close #fileNo

End Sub

投稿日時 - 2015-06-16 06:03:19

ANo.2

#1です。失礼しました。

こちらの書き方に不整合がありましたので、訂正修正させてください。
ファイル番号の扱いが統一されてされていなかっただけで、
ご質問の趣旨とは直接関係ないところのミスですので、恐縮です。

Sub Re8995053()
Dim sFile As String
Dim nFree As Integer
  Sheets("Sheet1").Select
  nFree = FreeFile
  sFile = CurDir() & "\dummy8995053.txt"
  Open sFile For Append As #nFree
    Print #nFree, """" & Cells(1, 1) & """,""" & Cells(1, 2) & """," & Cells(1, 3) & ",""" & Cells(1, 4) & """," & Cells(1, 5)
  Close #nFree
End Sub

投稿日時 - 2015-06-16 02:21:41

ANo.1

こんにちは。

例えば、

Sub Re8995053()
Dim sFile As String
Dim nFree As Integer
  Sheets("Sheet1").Select
  nFree = FreeFile
  sFile = CurDir() & "\dummy8995053.txt"
  Open sFile For Append As #nFree
    Print #1, """" & Cells(1, 1) & """,""" & Cells(1, 2) & """," & Cells(1, 3) & ",""" & Cells(1, 4) & """," & Cells(1, 5)
  Close #nFree
End Sub

投稿日時 - 2015-06-16 02:13:44

あなたにオススメの質問