Q質問

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

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

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

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

質問者からの補足コメント

  • 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.2の回答に寄せられた補足コメントです。 補足日時:2005/11/21 22:54 通報する

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

お礼日時:2005/11/22 14:00
    • good
    • 0

ちょっと良く判らないのですが、1件1ファイルでファイル名に連番をはりCSV保存でしょうか?

(VBA.例)
入力=LINE INPUT
出力=WRITE、PRINT
繰返=Do...Loop

あとはヘルプを参考にしながらモジュールを組んでみましょう。
詳細が判らないので、マクロで対応できる処理かは、お答えしかねます m(_ _)m

    • good
    • 0

ikdxさんこんにちは

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

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

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

参考URL:http://www.accessclub.jp/

この回答へのお礼

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

お礼日時:2005/11/21 22:53
    • good
    • 0

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

新しく質問する

注目の記事

「遼河はるひさんからの質問のベストアンサーでもれなくプレゼント!」

遼河はるひさんとアンジャッシュ児嶋さんが3月21日(土)・22日(日)に北陸新幹線で金沢へ旅行します。
あなたの回答で、素敵な旅のプランを教えてあげてください!

あなたの回答がベストアンサーに選ばれると、全員にQUOカード5,000円分プレゼント!

このQ&Aを見た人が検索しているワード


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

教えて!gooトラベル金沢

おすすめ情報