• 締切済み

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

  • データにカンマが入ったCSVデータのread方法

    VBにてCSVデータを読み込むロジックを組んでいるのですが データの中にカンマが入ったものがたまにあります。 通常通り読むとデータのカンマを区切りのカンマと間違え正しく変数に読み込まれません。 たとえばCSVデータが下記の場合 123,de-ta,12,000,jjjj 実際のデータは 123 de-ta 12,000 jjjj ですが 12,000を2個のデータと認識して 123 de-ta 12 0000 jjjj のようになってしまいます。 どなたか12,000をちゃんと読める方法をご存知の方お力をお貸しください。 よろしくお願い致します。

  • カンマ区切りCSVファイルをVBAで読み込みたい

    こんにちは。EXCELのVBAに詳しい方、どうか教えてください! カンマ区切りCSVファイルをEXCELに読み込みたいのですが、 CSVファイルのデータが金額のため、データ自体にもカンマが含まれていて、 金額のカンマでも分割されてEXCELのセルに収まってしまいます。 データの区切りのカンマと、金額のカンマを区別して読み込む良い方法はないでしょうか。 とても困っているので、お解りになる方どうかご回答をお願いいたします。 ・CSVファイルのデータ   1,000 , 2,000 , 1,500 , 3,000 , 1,000 , 2,500 , 2,000  ↑金額のカンマでデータが分割されないように読み込みたいのですが・・・

  • csvカンマ区切りデータに=""を入力したい

    csvカンマ区切りデータに、例えば、 ="00",="123",="456" といった感じで入力したいのです。 大元のcsvカンマ区切りデータで、 00,123,456 が入っているので、これをExcelを使ってText変換や書式設定で文字列にして みたのですが、csvデータとしては=""としては保存されていないのです。 どなたか、こういった型変換に詳しいかたご連絡をお待ちしています。

  • VBAでのcsv読み込みについて

     VBA初心者です。テキストファイル(ファイルの中はカンマ区切り)を別なEXCELシートではなくて、VBAを実行したEXCEL内のシート(例えばSheet2)に落としたいのですが、うまくいきません。  Workbooks.OpenText Filename:="C:\csv_test.txt", StartRow:=1, DataType:=xlDelimited, Comma:=True~ と記述すれば、別シートには落ちるのですが・・・。  簡単なことかもしれませんが、ご回答よろしくお願いいたします。

  • csv変換について

    メモ帳(.txt)のデータをcsv方式でカンマ区切りにしてexcelに取り込みたいとおもうのですがうまくいきません。どうしたらうまくいくでしょうか? ちなみにtxtは数字の羅列です

  • 【Access2000VBA】CSVファイルインポートの不具合

    Access2000でCSVファイルインポートをVBAで行っています。 ところが、CSVファイル内に全角カンマ(,)がある場合、 区切り文字として認識されてしまい困っています。 区切り文字としてではなく文字として取得したいのですが可能でしょうか。 お手数ですが方法がわかる方、ご回答よろしくお願いいたします。

  • Excel VBAにてCSVファイルを読みたい

    ExcelにてCSVファイルを読んで処理をしたい。 ただし、CSVファイルをExcelでopenすると遅いので、 VBAにてファイルとして読み込みで処理をしたいのですが、 皆さんは、どのように行っていますか? ※CSVファイルは、テキスト区切り→"(ダブルコーテーション)です  テキスト区切り無しであれば、1行読んで、カンマをsplitすれば良いと思いますが。。。。

  • VBA CSV形式で保存したいのですが

    EXCELで、以下のような表を作成してあります。   A       B       C 1 あ,10 2 い,20,100 3 う,30 4 え,40,200,か 5 お,50 A列にカンマを含めたデータが入っており、 1000行程度あります。 このようなデータをCSV形式で保存したいのですが、 単純にVBAを組むとそれぞれのデータが""で囲まれます。 また、上記例の3行目(以降)のデータの終わりに「,」が 出力されてしまいます。 例:   あ,10 い,20,100 う,30, VBAで、 (1) ""で囲まれることなく、 (2) 行内のデータの個数によって,をつける位置を判断させて (3) セルに入っているカンマ区切りのデータをB列等に分離せずに 保存する方法はないでしょうか? ご教授、よろしくお願いします。

  • ExcelでのCSVファイルの編集について、

    ExcelでのCSVファイルの編集について、 オートフィルタ機能を使いたいため、 ExcelでCSVファイルの編集しようとしているのですが、ちょっと苦戦しています。。。 私が試してみたこと 1.もとのCSVファイルの拡張子を○○.csv → ○○.txtに変更。   ↓ 2.Excelの「開く」からその○○.txtを読み込む。   ↓ 3.テキストファイルウィザードに従い、   1「カンマやタブなどの区切り文字によって~ 」にチェック   2「区切り文字」→ カンマ、「文字列の引用符」 → "   3「列のデータ形式」 → 文字列 ※090などの数字を、90と先頭の0を消されないように 上記のような手順でCSVファイルを取り込み、編集を終え、 保存する時は   「○○.txtにはテキスト(タブ区切り)と互換性のない機能が含まれている可能性があります。    この形式でブックを保存しますか?」 → このまま保存するため「はい」を選択 これでバッチリOK!…かと思われたのですが、 元の編集前の○○.txt は"名前","ヨミ","電話番号1", …… ""とカンマ区切りであったのが、 編集後の○○.txtは名前 ヨミ 電話番号1  …… タブ区切り(?) となってしまっています。 (CSVファイルとしてはタブ区切りでも問題ないのでしょうが…) どうすれば元のカンマ区切りの形式のまま保存できますでしょうか。 アドバイスよろしくお願い致します。

  • AccessでCSVを読み込めない

    CSV形式(カンマ区切り)のファイルがあります。4項目あり、各項目は以下になります。 ID,名前,説明,性別 このCSVをAccess 2003でインポートしたいと思っています。ただ、以下のようなデータが入っていた場合はエラーを起こします。 "001","近藤","性格は,普通","男" といったように、説明にカンマが混じってしまっている時です。これでは正しく読み込めません。 こういった形式のデータをインポートしたい時、何か良い手はないでしょうか?よろしくお願い致します。

専門家に質問してみよう