
使用しているのはAccess2000です。
クエリのレコードを、1レコードずつcsvにエクスポートしたいのですが、マクロなどで自動的におこなうことはできないでしょうか?
例.
クエリ名:test
レコード数:100件
フィールド名:ファイル名
testクエリの1から100までのレコードを、1件ずつcsvへエクスポートする。保存する際は「ファイル名」を参照して、csvファイル名とする。100件分のこれらの作業をすべてマクロ等で自動化したい。
VBAの知識はほとんどありませんが、VBAによる回答でも構いません。
よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
回答を間違っていましたm(_ _)m
テーブル(DB)とテキスト(CSV)が、ごちゃまぜでした。
入力=テーブルなので LINE INPUT は間違いでした。
色々やり方はあるのですが、DBのアクセスする所が、初めてだと判り辛いと思いまして。。。(^^;
簡単に作ってテストしてみましたので、フォームのコマンドボタンのイベントに貼り付けて下さい。
(1)フォーム・コマンドボタン→イベント・クリック時「イベントプロシージャ」→下記、処理を貼り付け
(2)テーブル名、項目名などは、変更して下さい
(3)変更の必要な箇所は、※をコメントに入れています(念の為「※」で検索して下さい)
(4)VBエディタ:ツール→参照設定→「Microsoft DAO 3.6 Object Library」
にチェックが入っている事をご確認下さい
(DBをDAOで使用:標準でチェック済みとは思います)
(5)不明な箇所が有りましたら、連絡用にこの投稿を閉じないで、再度コメントを入れて下さいネ
見ていれば、すぐに返事をいたしますので。。。(^^)
メールも届くので多分気が付くと思います
(6)とりあえずデータは、mdbがあるフォルダの「\DAT」に作成する様にしています
Private Sub コマンド1_Click()
--- ここから ---
Dim wCNN As Database 'データベース(テーブル)
Dim wREC As Recordset 'レコード
Dim wSQL As String 'SQL文等のワーク
Dim I_CNT As Integer 'I/P COUNT
Dim O_FNM As String 'O/P FILE NAME
'メッセージを表示
wSQL = "仕入先→CSVファイル" '※テーブル名
wSQL = wSQL & vbCrLf & vbCrLf & "作成しますか?"
If MsgBox(wSQL, vbYesNo + vbQuestion) = vbNo Then
Exit Sub 'いいえ-->終了
End If
'CSV定義(保存先・ファイル名の設定)
wSQL = Application.CurrentProject.Path & "\DAT\"
On Error Resume Next '念の為エラートラップ(削除時)
If Dir(wSQL, vbDirectory) <> "" Then
Call Kill(wSQL & "*.csv") '前回分は全て削除-->ごみ箱へ
Else
Call MkDir(wSQL) 'フォルダ作成
End If
O_FNM = wSQL & "FILE_???.csv" 'CSV出力先、???=あとで置換 ※ファイル名
On Error GoTo sCSV_OP_ERR '念の為エラートラップ
'接続
Set wCNN = CurrentDb
'テーブルを参照
wSQL = "SELECT [仕入先コード], [仕入先名]" '※[項目]数を増やす時
wSQL = wSQL & " FROM [仕入先]" '※[テーブル名]
Set wREC = wCNN.OpenRecordset(wSQL, dbOpenForwardOnly)
'(メイン処理)DBよりCSVを作成する
I_CNT = 0
Do Until wREC.EOF '※条件があればここへ or XXX=???
I_CNT = I_CNT + 1
'FILE NAME
'wSQL = Replace(O_FNM, "???", Format(wREC(0), "000")) '編集あり
wSQL = Replace(O_FNM, "???", wREC(0)) '編集なし
'CSV O/P
Open wSQL For Output As #1
Write #1, wREC(0), wREC(1) '※[項目]数を増やす時
Close #1
wREC.MoveNext '次レコードへ
Loop
'終了
wREC.Close: Set wREC = Nothing
wCNN.Close: Set wCNN = Nothing
Call MsgBox(Format(I_CNT, "#,##0") & "件作成しました")
Exit Sub
sCSV_OP_ERR:
Call MsgBox("(エラー発生)sCSV_OP" & vbCrLf & vbCrLf & wSQL, vbExclamation)
Call MsgBox(Err.Number & " " & Err.Description)
--- ここまで ---
End Sub
areare2005さん
すごい!思い通りにできました!
本当にありがとうございます!
コードの中に親切なコメントを書いていただけたので
カスタマイズも自分でできました。
----------------------------------------
ひとつつまづいたところがあったので、
ここに記しておきたいと思います。
>(4)VBエディタ:ツール→参照設定→「Microsoft DAO 3.6 Object Library」
>にチェックが入っている事をご確認下さい
このチェックを入れて実行したところ、
エラーが出てしまいました。
「13型が一致しません」とのこと。
参照設定の中に
「Microsoft ActiveX Data Object 2.1 Library」
というのにもチェックが入っており、
それの優先順位を下げたところ、
問題なく実行できるようになりました。
----------------------------------------
areare2005さん
本当にありがとうございました!
No.2
- 回答日時:
ちょっと良く判らないのですが、1件1ファイルでファイル名に連番をはりCSV保存でしょうか?
(VBA.例)
入力=LINE INPUT
出力=WRITE、PRINT
繰返=Do...Loop
あとはヘルプを参考にしながらモジュールを組んでみましょう。
詳細が判らないので、マクロで対応できる処理かは、お答えしかねます m(_ _)m
この回答への補足
areare2005さん
おそらくareare2005さんのおっしゃってることで
だいたい間違っていないと思うのですが,
説明不足でしたので補足させていただきます。
以下のようなテーブルがあるとします。
---------------
No 名前
1 北海道
2 青森
3 秋田
---------------
この3つのレコードのうち,ひとつだけ取り出して,
csvファイルで保存したいと思います。
---------------
No 名前
1 北海道
---------------
csvファイルで保存する際に,
「No」にふられている番号を
ファイルネームにしたいと思います。
------------------------------
1.csv(中身は「1,北海道」)
------------------------------
これを3回繰り返し,レコード分すべてを
csvファイルにしたいと思います。
------------------------------
1.csv(中身は「1,北海道」)
2.csv(中身は「2,青森」)
3.csv(中身は「3,秋田」)
------------------------------
これら一連の作業を,
マクロもしくはVBAで自動化できる方法を
探していました。
VBAについてはほとんど知識がないのですが,
とりあえずareare2005さんの例を参考にして,
試してみたいと思います。
ありがとうございました。
No.1
- 回答日時:
ikdxさんこんにちは
ACCESS使用経験ありなので回答出来ると思ったら
マクロで自動になのですね。
もしかするとご存知かもしれませんが
ACCESS CLUBというサイトがあります。
そこで検索、質問してみたら如何でしょうか?
ACCESSで困ったときはほとんどこのサイトで解決致しましたので・・・
参考URL:http://www.accessclub.jp/
ednanさん,ありがとうございます。
そのサイトでも調べてみたのですが,
どうもうまく解決できませんでした。
ただ,とても参考になりました。
今度Accessでわからないことがあったら
そちらで質問してみようと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
Accessのテーブルからcsv出力する際に一部のフィールドを除いて出力したい
Access(アクセス)
-
Access 最後のレコードに到達するまでループ処理を行う方法
Access(アクセス)
-
ACCESSテーブルを RecordSet以外で1レコードづつ読む方法
Visual Basic(VBA)
-
-
4
【Access】クエリで抽出したデータをCSV形式でエクスポートできますか?
Access(アクセス)
-
5
ダブルコーテーション付きでCSV出力
Visual Basic(VBA)
-
6
AccessからExcelにエクスポートする時に常に上書きしたい
Excel(エクセル)
-
7
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
8
Access テーブルを分割してエクスポートしたい
Access(アクセス)
-
9
ACCESS で 項目名を出力せずにエクスポートしたい
その他(データベース)
-
10
マクロから出力されるcsvのダブルコーテーションをなくしたい。
Visual Basic(VBA)
-
11
accessでクエリをExcelにエクスポートする時にファイル名に日付を追加したい
Access(アクセス)
-
12
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
13
Accessのフォーム上にレコード数とレコード番号の表示
その他(データベース)
-
14
Access サブフォームでの選択行の取得
その他(データベース)
-
15
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
16
Access VBAでクエリーのレコード件数を取得したいのですが
その他(データベース)
-
17
AccessでSQL結果を直接csvに書き出すには?
Word(ワード)
-
18
Accessのリンク先を相対パスにしたい
その他(データベース)
-
19
Access テキスト型に対する指定桁での0埋め方法
その他(データベース)
-
20
Access VBAから使用したExcelプロセスを閉じる方法について
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
3つ以上のテーブルをUNIONする...
-
Accessにインポートしたら並び...
-
(ACCESS)並び替えをしないで...
-
Access 1レコードずつcsvで出力...
-
ACCESS 『DoCmd.OutputTo』に...
-
Access 重複しないメールをテー...
-
ManagementStudioからのデータ削除
-
SQLServerで同一条件レコードの...
-
Accessの固有レコード識別子の選択
-
Excel→Accessテーブル インポ...
-
数百万件レコードのdelete
-
SQLiteで最も古いレコードのみ...
-
テーブルのレコード削除ができ...
-
ACCESSのBookmarkプロパティの...
-
2つのテーブルからのレコード取得
-
検索結果に順位情報を追加したい
-
カラム数が多いテーブルの速度
-
相互データがあるの情報を取りたい
-
Accessでの排他制御
-
Access VBA Me.Requery レコー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessにインポートしたら並び...
-
3つ以上のテーブルをUNIONする...
-
数百万件レコードのdelete
-
データの二重表示の原因
-
ACCESSのBookmarkプロパティの...
-
Access 削除クエリが重い
-
Access VBA Me.Requery レコー...
-
SQLデータ修正時に『このレコー...
-
Access 1レコードずつcsvで出力...
-
SQLServerで同一条件レコードの...
-
Access カレントレコードがあり...
-
2つの項目が重複するレコード...
-
ManagementStudioからのデータ削除
-
テーブルのレコード削除ができ...
-
Accessでの排他制御
-
(ACCESS)並び替えをしないで...
-
Accessでレコードが更新された...
-
Accessの重複クエリで最小以外...
-
Accessで重複したデータを一件...
-
非連結サブフォームのレコード...
おすすめ情報