質問

使用しているのはAccess2000です。
クエリのレコードを、1レコードずつcsvにエクスポートしたいのですが、マクロなどで自動的におこなうことはできないでしょうか?

例.
クエリ名:test
レコード数:100件
フィールド名:ファイル名
testクエリの1から100までのレコードを、1件ずつcsvへエクスポートする。保存する際は「ファイル名」を参照して、csvファイル名とする。100件分のこれらの作業をすべてマクロ等で自動化したい。

VBAの知識はほとんどありませんが、VBAによる回答でも構いません。

よろしくお願いいたします。

通報する

回答 (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さん
本当にありがとうございました!

ちょっと良く判らないのですが、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さんの例を参考にして,
試してみたいと思います。

ありがとうございました。

ikdxさんこんにちは

ACCESS使用経験ありなので回答出来ると思ったら
マクロで自動になのですね。

もしかするとご存知かもしれませんが
ACCESS CLUBというサイトがあります。
そこで検索、質問してみたら如何でしょうか?

ACCESSで困ったときはほとんどこのサイトで解決致しましたので・・・

この回答へのお礼

ednanさん,ありがとうございます。
そのサイトでも調べてみたのですが,
どうもうまく解決できませんでした。
ただ,とても参考になりました。
今度Accessでわからないことがあったら
そちらで質問してみようと思います。

このQ&Aは役に立ちましたか?0 件

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

新しく質問する

注目の記事

おしトピへのコメントで10人に1人に500円分のギフト券プレゼント!(先着2000名様)

話題のトピックにさくっとコメントできる「おしトピ」で指定のオーダー3件にコメントした方先着2000名様の10人に1人にギフト券をプレゼント!
フジテレビ出身のフリーアナウンサー長谷川豊氏の質問にも回答受付中!


新しく質問する

このカテゴリの人気Q&Aランキング

毎日見よう!教えて!gooトゥディ

べんりQ&A特集