• ベストアンサー

Access 1レコードずつcsvで出力したい

使用しているのはAccess2000です。 クエリのレコードを、1レコードずつcsvにエクスポートしたいのですが、マクロなどで自動的におこなうことはできないでしょうか? 例. クエリ名:test レコード数:100件 フィールド名:ファイル名 testクエリの1から100までのレコードを、1件ずつcsvへエクスポートする。保存する際は「ファイル名」を参照して、csvファイル名とする。100件分のこれらの作業をすべてマクロ等で自動化したい。 VBAの知識はほとんどありませんが、VBAによる回答でも構いません。 よろしくお願いいたします。

  • ikdx
  • お礼率72% (8/11)

質問者が選んだベストアンサー

  • ベストアンサー
  • arare2005
  • ベストアンサー率31% (63/199)
回答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

ikdx
質問者

お礼

areare2005さん すごい!思い通りにできました! 本当にありがとうございます! コードの中に親切なコメントを書いていただけたので カスタマイズも自分でできました。 ---------------------------------------- ひとつつまづいたところがあったので、 ここに記しておきたいと思います。 >(4)VBエディタ:ツール→参照設定→「Microsoft DAO 3.6 Object Library」 >にチェックが入っている事をご確認下さい このチェックを入れて実行したところ、 エラーが出てしまいました。 「13型が一致しません」とのこと。 参照設定の中に 「Microsoft ActiveX Data Object 2.1 Library」 というのにもチェックが入っており、 それの優先順位を下げたところ、 問題なく実行できるようになりました。 ---------------------------------------- areare2005さん 本当にありがとうございました!

その他の回答 (2)

  • arare2005
  • ベストアンサー率31% (63/199)
回答No.2

ちょっと良く判らないのですが、1件1ファイルでファイル名に連番をはりCSV保存でしょうか? (VBA.例) 入力=LINE INPUT 出力=WRITE、PRINT 繰返=Do...Loop あとはヘルプを参考にしながらモジュールを組んでみましょう。 詳細が判らないので、マクロで対応できる処理かは、お答えしかねます m(_ _)m

ikdx
質問者

補足

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さんの例を参考にして, 試してみたいと思います。 ありがとうございました。

noname#82027
noname#82027
回答No.1

ikdxさんこんにちは ACCESS使用経験ありなので回答出来ると思ったら マクロで自動になのですね。 もしかするとご存知かもしれませんが ACCESS CLUBというサイトがあります。 そこで検索、質問してみたら如何でしょうか? ACCESSで困ったときはほとんどこのサイトで解決致しましたので・・・

参考URL:
http://www.accessclub.jp/
ikdx
質問者

お礼

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

関連するQ&A

  • アクセス csv出力 抽出条件

    データベース(アクセス2003)で作成されたファイルがあります。 このファイルのフィールドは"日付"、"時刻"、"設備"、"数値"のようになっています。(設備名は1~4) フィールドの条件を指定して日付ごと、加えて設備別にcsv出力を行いたいと思います。 クエリを用いて抽出条件に日付、設備名を入力してクエリを実行 そしてcsvにエクスポートという形では時間がかかりすぎるため困っています。(データは1日分が8万点ほどで年によっては設備が4つにわかれています。データは途中が抜けていたりしますが2005年~2008年まであります。) どうにかしてもっと効率的な作業を行えないでしょうか?

  • 途中で改行されたCSVをAccessに正常に取り込むには?

    以下のようなCSVファイルがあり、これをAccessにインポートしようとしています。 フィールド1  数字7桁 フィールド2  数字2桁 ・・・・・    フィールド20 テキスト42桁 ・・・ フィールド26 数字13桁 ただ、レコードの中には長すぎるためか途中で改行されてしまっている レコードがあり、レコードが途中で切れてしまい、続きが次の行に 読み込まれると言う少し困った状態になっています。 (見たところ、フィールド20で切れているようです) 数箇所なら元のCSVを修正してから取り込めばいいのですが、全体が約80万件で、 そのうち200件以上はあるため、手作業でなく何か自動的に直す方法で対処したいと思っています。 (元のCSV自体が読み込みが重いため、手作業は困難です・・) Accessに取り込むためのいい方法はないでしょうか? OSはWinXPのSP2、Accessは2003です。

  • Accessクエリをcsvでエクスポートする方法

    いつもお世話になっております。 Access2007でクエリをcsv形式でエクスポートしたく、マクロを使って設定をしたのですが、 [ファイル名]引数にファイル名を指定して下さいとエラーメッセージが出ます。 エクスポートするごとに新規でファイルが作成されてほしいので、ファイル名を空欄にしました。 予めエクスポートするファイルを作って、どこかで保存しておかなくてはいけないのでしょうか? エクスポートする度に新たに新規ファイル保存されるようにするにはどうしたら良いですか? よろしくお願い致します。

  • Access フォーム上でクエリによるcsv出力

    Accessで障害履歴を管理するDBを作っています ・障害内容をフォームより起票して障害履歴テーブルに保存される ・月に一度、前月分の障害をクエリでcsvに抽出 ・抽出する際に発生日時のフィールドを[Like "2021/04/**"]の 抽出条件を入れて指定した月をクエリで抽出しています。 今回悩んでいるところは、毎回クエリのデザインビューを開き 発生日時の抽出条件に[Like "2021/04/**"]を入れて抽出ではなく フォーム上で2021年○月と指定して抽出というボタンを実行すると 自動でcsv出力まで出来るのを目指しています。 ※csv出力する際に指定したファイル名が自動でつけばなお良い イメージとしてはフォーム内にエクスポートというボタンを作り、 それを押すと障害発生日時の○年○月を指定するポップアップが表示され、日付指定して実行すると○月分の障害履歴が指定したファイル名でcsvにエクスポートされる。 またはフォーム内に障害発生日時の○年○月を指定するテキストボックスがあり、日付指定後にエクスポートのボタンを押すと同様にcsv出力されるのを作りたいのですが可能でしょうか?

  • Access→csv カウント数メッセージ

    こんにちは Access2010を使用しています。 Accessからcsvファイルをエクスポートするシステムを作成中なのですが、 例えば、フォームのcsvエクスポート実行のマクロボタンをクリックすると「○○件のデータをエクスポートします。 よろしいですか?」みたいなメッセージが出たら幸いと思いまして。。。 現在は、フォームの実行ボタンをクリックすると、黙って指定したフォルダへのcsvエクスポートが完了してい ます。なので、データ数はcsvファイルを開くまで分かりません。 元になるクエリには[状況]というフィールドが[受注]のみという抽出条件なので、毎回データ数が違います。 何分、VBAが未習得でして。。。フォーム内の実行ボタンのプロパティシートの何処かに何か入れる 様なイメージなのかな?くらいしか分かりません。 出来れば、モジュール画面からの編集は避けたいです。 どなたかお分かりになる方宜しくお願い致します。 宜しくお願い致します。

  • Accessで複数のクエリを1つのCSVファイルにエクスポートする方法

    Accessで複数のクエリを1つのCSVファイルにエクスポートする方法はないでしょうか? 現在は下記のような記述でそれぞれCSVファイルを作成しています。 クエリ1~3を1つのCSVファイルにエクスポートする方法があれば教えて頂きたいです。 よろしくお願いします。 DoCmd.TransferText acExportDelim, , "クエリ1", "C:test1.csv", True, "" DoCmd.TransferText acExportDelim, , "クエリ2", "C:test2.csv", True, "" DoCmd.TransferText acExportDelim, , "クエリ3", "C:test3.csv", True, ""

  • アクセステキストエクスポートについて。

    アクセスでエクスポートする際に フィールド開始位置が有効ではないとなり テキストのアウト出来ない場合 下記の DoCmd.TransferText acExportDelim, , "ファイル名クエリ", "C:\Documents and Settings\Administrator\デスクトップ" & "\" & "ファイル名.csv", True End Sub のようにして対応しているのですが 1レコード目に 余計な フィールド1,フィールド2,フィールド3,フィールド4,フィールド5のようなレコードが 付いてしまうのですが インポートしたままの状態でエクスポート出来ないでしょうか。 ちなみにファイル数が多いのを想定して あとで1レコード目を削除する方法は考えておりません。 どうぞよろしくお願いします。

  • Access名前に本日の日付のあるCSVを開きたい

    Accessのクエリ結果をテキストエクスポートでCSV形式で保存しています。その際に、CSVの名前をCSV+format(date,"yyyymmdd")にしています。 エクスポート後に、この本日が変数となっているCSVファイルをアプリケーションの実行で開きたいのですが、コマンドラインの書き方が分かりません。 現在は、"C:\Windows\System32\notepad.exe" "C:\BBB\GGG\CSV%date:~0,4%%date:~5,2%%date:~8,2%.csv" としていますが、書き方が間違えているというエラーになります。 VBAまたはマクロでどのようにすればこれができるか教えてください。 よろしくお願いします。

  • ACCESS2000での大量データ処理

    CSVファイルの情報をACCESS2000にインポートして集計処理をしたいと考えてます。 CSVファイルの構成は、20フィールド(全て文字属性)で1レコード、1400レコードで1件となっております。(この仕様を変更する事は出来ないのが条件です。) 言い直せば、1名分の情報は1400レコードあるとなります。但し、集計に使用する情報はその内の400レコードであり、1000レコードは不要です。 処理する人数は3万件ぐらいあります。 (1)1400レコード×3万件の情報をインポート出来るのでしょうか?    テーブル制限の1Gを超えないのでしょうか(テーブルサイズの参照方法も?) (2)CSVをインポートする際に、必要なフィールド400だけインポートできるVBAはあるのでしょうか?  必要不要の判別フィールドはあります。 (3)インポート後、ACCESSで400項目を1レコードにする事はできないか?255以上のフィールドのテールを処理する方法はあるのでしょうか? (4)このような大量集計を可能にするには、みなさんは何を使用しているのでしょうか? よろしくお願いいたします。

  • Access クエリを実行して出力するマクロ

    環境 WindowsXP、Access2010 質問 以下のような作業をマクロで自動化したいと考えています。 マクロをどのように設定すればよろしいでしょうか? お手数かけて恐れ入りますがご教示いただければ幸いです。 ■使用するテーブル ID|名前|出身地 -------------- 1|大田|東京都 2|川崎|神奈川 3|足立|東京都 ■自動化したい手順 1. 出身地が"東京都"のレコードのみを抽出する 2. ↑のデータを 東京都.xls のファイル名でエクスポート 3. 出身地が"神奈川"のレコードのみを抽出する 4. ↑のデータを 神奈川.xls のファイル名でエクスポート 5. 終わり ■東京都.xls のエクスポート結果 ID|名前|出身地 -------------- 1|大田|東京都 3|足立|東京都 ■神奈川.xls のエクスポート結果 ID|名前|出身地 -------------- 2|川崎|神奈川 ■補足 ・出身地ごとにクエリを作成すれば同様の事が実現できますが、  それだと、作成するクエリ数が多くなるので、できれば避けたいです。 ・VBAの知識はほとんどありませんが、  教えていただければ自分で調べながら試してみます。 なにとぞよろしくお願いいたします。