- 締切済み
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(",")とか色々試しましたが上手くいきません。 どうしたら望み通りの出力ができるでしょうか。 ぜひ教えて頂きたいです。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- BarcodeMaster
- ベストアンサー率73% (17/23)
(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)
- imogasi
- ベストアンサー率27% (4737/17069)
データ例 A2:E4 aa1 bb1 cc1 dd1 ee1 aa2 bb2 cc2 dd2 ee2 aa3 bb3 cc3 dd3 ee3 コード 標準モジュールに 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」タブ、位置ぞろえのための複数スペースなどあるよね。
- dogs_cats
- ベストアンサー率38% (278/717)
データ数が少ない場合は、質問の様な記載方法でも良いのですが、データ数が多くなったり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
- real beatin(@realbeatin)
- ベストアンサー率82% (174/211)
#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
- real beatin(@realbeatin)
- ベストアンサー率82% (174/211)
こんにちは。 例えば、 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