ACCESS VBAで、CSVにデータを吐き出したいのですが、WORKのテーブルを作るのが面倒なので、変数にセットしたカンマ区切りのデータを直接CSVに吐き出したいと思っております。 TXT = .Height & "," & .Weight を Open "A:DATA.CSV" For Output As #Name へ一件ずつループで回して吐き出したいのですが、「型が一致しません」というエラーがでます。ご存知の方がいらっしゃいましたら、どいうロジックを書けば良いか教えて下さい。
A 回答 (6件)
- 最新から表示
- 回答順に表示
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コードを書けたらそれで十分です。
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 関数は後ほど。
No.4
- 回答日時:
こんにちは、
本題から、外れますが、VBAで、CSVを作らないといけないのですか??
プログラム経験が、少ない??ない??
のに、VBAで、にこだわる理由がわかりません。
単に、アクセスの機能を使って、選択クエリーで
必要な、データに絞って、CSVにエキスポートすれば、
単に、CSVファイルは、できると思うのですが、
VBAにこだわる理由は,何ですか??
No.3
- 回答日時:
> 当方もともとPGではなく、本意ならぬ事をやらされておりまして。
だからと言って、「プログラム(AccessVBA)が、手加減してくれたり、大目に見てくれる」わけではありませんよ。
「厳密な規則どおりに、理屈に合った」指定をしない限り、まともに動作しないのがプログラムです。
> 「#Name」は何も(dimとかで)定義しておりません。
> これが原因でしょうか?
その可能性が大きいですね。
変数名を「FNo」とかにして、
--------------------------------------------------
Dim FNo ' 変数宣言
~
FNo=FreeFile '利用可能なファイル番号を求め、変数に設定
Open "A:DATA.CSV" For Output As #FNo '該当ファイル番号でファイルを開く
~
Close #FNo ' 指定したファイル番号のファイルを閉じる
--------------------------------------------------
等にするとどうなります?
No.2
- 回答日時:
> Open "A:DATA.CSV" For Output As #Name ←落ちる
あ!
1つ確認していませんでした。
「#Name」とありますが・・・
変数「Name」はどうやって定義して、どういう値を設定していますか?
#「Name」は、組み込み変数等でよく使われるので、
#別の名前にした方が余計なトラブルをまね回亜出すみます。
この回答への補足
>「#Name」とありますが・・・
>変数「Name」はどうやって定義して、どういう値を設定していますか?
すみません;当方もともとPGではなく、本意ならぬ事をやらされておりまして。上記の件ですが、「#Name」は何も(dimとかで)定義しておりません。
これが原因でしょうか?ご回答ありがとうございます。
No.1
- 回答日時:
> TXT = .Height & "," & .Weight を
> Open "A:DATA.CSV" For Output As #Name へ
> 一件ずつループで回して吐き出したいのですが、
実際に実行しているコードは、どういうコードで、
そのどこでエラーとなっていますか?
またその際の「.Height」「.Weight」「TXT」の値はどうなっていますか?
この回答への補足
早速のご回答ありがとうございます。
実際は下記の所で落ちてしまいます。
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が見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
CSV形式での保存時に”文字列...
-
マクロから出力されるcsvのダブ...
-
複数のcsvファイルをExcelに一...
-
【C#】パス名で無効な文字
-
<csv>複数条件で検索・抽出し、...
-
【ExcelVBA】UTF-8の文字コード...
-
EXCEL|csvで保存→開くcsvを閉じる
-
VBAでの行削除について
-
csvファイルでの日付設定「yyyy...
-
複数のCSVファイルのAccessテー...
-
CSV出力して、MS/EXCELで開くと...
-
CSVファイルの項目行を削除...
-
ファイルのアクセス回数について
-
エクセルのプロパティーでセキ...
-
エクセルで複数のコメントのサ...
-
ファイル名と同名のフォルダを...
-
エクセルVBAで一つ上の階層...
-
エクセルvbaでdocuworksprinter...
-
Excel 相対パス
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
バッチでCSVを処理する時、空の...
-
csvファイル 項目数取得
-
マクロから出力されるcsvのダブ...
-
CSV形式での保存時に”文字列...
-
【C#】パス名で無効な文字
-
エクセルVBA 大容量CSVファイル...
-
データ解析ソフトRでのファイル...
-
CSVファイル作成
-
VBAでcsvファイルを読み込んで...
-
複数のcsvファイルをExcelに一...
-
CSVファイルの項目行を削除...
-
csvファイルでの日付設定「yyyy...
-
複数のCSVファイルのAccessテー...
-
csvファイルを列数ごとに分割す...
-
エクセル形式のファイルの読み込み
-
【エクセル マクロ】読み込ん...
-
VBAでCSVファイルのインポート...
-
【ExcelVBA】UTF-8の文字コード...
-
csvファイルのデータの間引きを...
おすすめ情報