• 締切済み

ACCESS VBAで、CSVにデータを吐き出したいのです

ACCESS VBAで、CSVにデータを吐き出したいのですが、WORKのテーブルを作るのが面倒なので、変数にセットしたカンマ区切りのデータを直接CSVに吐き出したいと思っております。 TXT = .Height & "," & .Weight を Open "A:DATA.CSV" For Output As #Name へ一件ずつループで回して吐き出したいのですが、「型が一致しません」というエラーがでます。ご存知の方がいらっしゃいましたら、どいうロジックを書けば良いか教えて下さい。

みんなの回答

noname#140971
noname#140971
回答No.6

Public Function FileAppend(ByVal FileName As String, ByVal TEXT As String) As Boolean On Error GoTo Err_FileAppend   Static isOpen As Boolean   Static fso  As FileSystemObject   Static txs  As TextStream      If Not isOpen Then     isOpen = True     Set fso = New FileSystemObject     Set txs = fso.CreateTextFile(FileName, True)   End If   If Len(TEXT) > 0 Then     txs.WriteLine TEXT   End If   FileAppend = True Exit_FileAppend: On Error Resume Next   If Len(TEXT) = 0 Then     isOpen = False     Set txs = Nothing     Set fso = Nothing   End If   Exit Function Err_FileAppend:   Resume Exit_FileAppend End Function 上記の FileAppend 関数を適当な標準モジュールに登録して下さい。 この一点がクリアできたら、先の回答のように、非常に簡単なコードで目的が達成できます。 [イミディエイト] ? FileAppend ("C:\TEMP\TEST.CSV", "100,200") True ? FileAppend ("C:\TEMP\TEST.CSV", "1000,2000") True ? FileAppend ("", "") True 次に、このように、イミディエイトウインドウで一応テストしてみて下さい。 FileAppend 関数は、引数を()で括れば、True/False などの結果を戻します。 メモ帳等で C:\TEMP\TEST.CSV を開けば、次のように書き込まれていることが確認されます。 100,200 1000,2000 初心者であれば、いきなりVBAコードを書くのでなく、イミディエイトウインドウでテストするのも手です。 VBAコードは、このテストを For ループで自動化するだけですから・・・。 なお、FileAppend関数に関しては、暇があったら、それぞれのステップをヘルプで確認したらいいです。 しかし、今回は、理解の度合いは問題ではありません。 要は、FileAppend関数を用いて非手続き的にVBAコードを書けたらそれで十分です。

noname#140971
noname#140971
回答No.5

初心者の方は、もっと、非手続き的な書き方をされたがいいです。 例えば、次のコードでも目的は達成されます。 Private Sub コマンド0_Click()   Dim I    As Integer   Dim N    As Integer   Dim Datas(3) As String      Datas(0) = "0,0"   Datas(1) = "1,1"   Datas(2) = "2,2"   Datas(3) = "3,3"      N = UBound(Datas()) ' 配列の大きさをNに代入   For I = 0 To N     FileAppend "C:\Temp\DATA.CSV", Datas(I)   Next I   FileAppend "", "" ' ファイルを閉じる End Sub このコードですと、まず、どんな初心者の方でも書けます。 作成された Datas.csv を NOTEPAD で開くと次のようです。 [c:\temp\datas.csv] 0,0 1,1 2,2 3,3 条件1、Microsoft Scripting Runtime に [ツール][参照設定] レ点を付ける。 条件2、FileAppend 関数を標準モジュールに追加する。 朝礼が始まりますので、FileAppend 関数は後ほど。

  • tom11
  • ベストアンサー率53% (134/251)
回答No.4

こんにちは、 本題から、外れますが、VBAで、CSVを作らないといけないのですか?? プログラム経験が、少ない??ない?? のに、VBAで、にこだわる理由がわかりません。 単に、アクセスの機能を使って、選択クエリーで 必要な、データに絞って、CSVにエキスポートすれば、 単に、CSVファイルは、できると思うのですが、 VBAにこだわる理由は,何ですか??

  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.3

> 当方もともとPGではなく、本意ならぬ事をやらされておりまして。 だからと言って、「プログラム(AccessVBA)が、手加減してくれたり、大目に見てくれる」わけではありませんよ。 「厳密な規則どおりに、理屈に合った」指定をしない限り、まともに動作しないのがプログラムです。 > 「#Name」は何も(dimとかで)定義しておりません。 > これが原因でしょうか? その可能性が大きいですね。 変数名を「FNo」とかにして、 -------------------------------------------------- Dim FNo ' 変数宣言 ~ FNo=FreeFile  '利用可能なファイル番号を求め、変数に設定 Open "A:DATA.CSV" For Output As #FNo '該当ファイル番号でファイルを開く ~ Close #FNo ' 指定したファイル番号のファイルを閉じる -------------------------------------------------- 等にするとどうなります?

fy4777
質問者

お礼

ご回答ありがとうございます。 問題はなんとか解決いたしました。 ありがとうございます。

  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.2

> Open "A:DATA.CSV" For Output As #Name ←落ちる あ! 1つ確認していませんでした。 「#Name」とありますが・・・ 変数「Name」はどうやって定義して、どういう値を設定していますか? #「Name」は、組み込み変数等でよく使われるので、 #別の名前にした方が余計なトラブルをまね回亜出すみます。

fy4777
質問者

補足

>「#Name」とありますが・・・ >変数「Name」はどうやって定義して、どういう値を設定していますか? すみません;当方もともとPGではなく、本意ならぬ事をやらされておりまして。上記の件ですが、「#Name」は何も(dimとかで)定義しておりません。 これが原因でしょうか?ご回答ありがとうございます。

  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.1

> TXT = .Height & "," & .Weight を > Open "A:DATA.CSV" For Output As #Name へ > 一件ずつループで回して吐き出したいのですが、 実際に実行しているコードは、どういうコードで、 そのどこでエラーとなっていますか? またその際の「.Height」「.Weight」「TXT」の値はどうなっていますか?

fy4777
質問者

補足

早速のご回答ありがとうございます。 実際は下記の所で落ちてしまいます。 TXT = .Height & "," & .Weight ' FD書き込み ' Open "A:DATA.CSV" For Output As #Name ←落ちる Close #Name .Height と .Weight の値は160と40で TXT の値は ”160,40”となっております。 DoCmd.TransferText acExportDelim, , TXT, "A:\IMPORT.TXT", True  も試してみたのですが、やはりワークのテーブルを作らないと駄目らし く、DoCmd.TransferTextでは使えませんでした。 テーブルを使うのではなく、変数にセットしたカンマ区切りのデータを一行ずつdata.csvへ吐き出す方法を教えて下さい。 よろしくお願い致します。

関連するQ&A