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

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

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

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

このQ&Aに関連する最新のQ&A

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
    • good
    • 0
この回答へのお礼

areare2005さん
すごい!思い通りにできました!
本当にありがとうございます!

コードの中に親切なコメントを書いていただけたので
カスタマイズも自分でできました。

----------------------------------------
ひとつつまづいたところがあったので、
ここに記しておきたいと思います。

>(4)VBエディタ:ツール→参照設定→「Microsoft DAO 3.6 Object Library」
>にチェックが入っている事をご確認下さい

このチェックを入れて実行したところ、
エラーが出てしまいました。
「13型が一致しません」とのこと。

参照設定の中に
「Microsoft ActiveX Data Object 2.1 Library」
というのにもチェックが入っており、
それの優先順位を下げたところ、
問題なく実行できるようになりました。
----------------------------------------

areare2005さん
本当にありがとうございました!

お礼日時:2005/11/22 14:00

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

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

補足日時:2005/11/21 22:54
    • good
    • 0

ikdxさんこんにちは



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

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

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

参考URL:http://www.accessclub.jp/
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/11/21 22:53

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

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

このQ&Aと関連する良く見られている質問

Qデウス=エクス=マキナって…

現在開催中の降臨チャレンジでマキナがありますが、経験値効率がいいこともあり、ミルの進化素材の進化素材回収を兼ねて周回しています。
そんななかでセラフィスの素材が墜ちてきました…(・・;)
右足だったんですけどもしかして全種類落ちることもあるんでしょうか?

Aベストアンサー

デウスエクスマキナで手に入るのは右足だけなので、全部は手に入らないですよ。他のパーツはマシンゼウス降臨とマシンヘラ降臨のB8で稀にドロップします。後、最近判明したことで右手がリバティーガイスト、左手がスタージャスティスで稀にドロップすることがあるそうです。

QAccessで複数のクエリを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, ""

Aベストアンサー

クエリ内がどういう形式になっているかわかりませんが、一つのcsvファイルにエクスポートするということは、カラム数は同数で且つそのカラム名・カラムの並び順も全て同じということでしょうか。
それであればクエリを一つにまとめて(クエリ1、クエリ2、クエリ3をサブクエリにしてUNION ALLなどする)新たにクエリ4を作成されるのが手っ取り早いです。

Qマキナ67とマミヤ7どっちがいい?

いつもお世話になっています。

6×7版のカメラが欲しいと前から思っていました。風景やスナップ、人物などを撮りたいと思っています。そこで候補に挙がったのが、マキナ67とマミヤ7です。比べることは難しいとは思いますがどちらが使いやすいのでしょうか。マキナの携帯性、ニッコール魅力、マミヤ7のレンズ交換、ホールドのよさなどそれぞれ魅力的なカメラで迷っています。

Aベストアンサー

マキナW67 マミヤ7どちらも所有しています…最近は出番が限られますが…
性格と言うか、目的が違うカメラですから…
フィールドに持ち出して風景や建物とるならマキナW67です。
80ミリバージョンはあまり評価しませんが…
他の機材を担いで仕事に出かける折に、隙間にスッと入るコンパクト性はマキナに限ります。
このレンズは周辺光量で不利ですが…広角用NDフィルターでカバーできます。

マミヤ7は、集合用のフジGW690のサブとして持って行くくらいです。
もっぱらRBが多いし…

お勧めはマキナですが、人物用には限定されますね…

Q(MS-Access クエリ)直前レコードと同じレコードを空白としたい

MS-Accessのクエリで、文字列フィールドのデータが直前のレコードと同じデータの場合、そこを”空白”表示としたいのです。下記の様にしたいのです。教えてください。
 ----------------
 文字列フィールド
----------------
 ああああああああ
 ああああああああ <-----空白表示とする
 いいいいいいいい
 うううううううう
 うううううううう <-----空白表示とする
 ええええええええ

Aベストアンサー

(1)クエリとして実現したい場合は該当フィールドの他にレコードを
一意に識別できる項目が必要です。
(2)レポートで出力する場合はグループヘッダに指定することで、
最初に出現したものだけを表示することができます。
いずれにも該当しない場合は単純な方法では処理できません。

Qマキナ670の修理

以前信頼していたマキナ修理専門店が廃業して、名の通った修理業者に出してはみたんですがいまいちうまく直らないので困っています。(特にモルト・光漏れ)関東・関西で個人のいい修理店がありましたら。教えていただけないでしょうか?
お願いいたします。住所・TELなどはわかるので店名だけでいいです。

マキナ専門店では綺麗に直ったのに大手で修理したときは光漏れしたフィルムとか持っているのにだめでした。やり直してもらってもうまくいきません。
マキナは蛇腹の周りなどは光漏れなし、落下・ぶつけるなど一切していません。モルトの劣化だけです。
自分でやるにはモルトを張るところがこまごましているのでやめました。

Aベストアンサー

個人で仕事キッチリならば、「ハヤタカメララボ」(オススメ)
気さくな主人は、良く、カメラ雑誌のレポートを書いています。
手に入らない機械パーツは、自分で作っちゃう修理店です。
http://www.hayatacamera.co.jp/

規模の大きな会社ならば、「関東カメラサービス」
http://www.kanto-cs.co.jp/

Qユニオンクエリ?レポートにて1件のレコードを複数レコードとして表示。

レポートにて1件のレコードを複数レコードとして表示。したいです。

マスタというテーブルに時間1・結果1・時間2・結果2・時間3・結果3という項目があり、
これをクエリにて別々のレコードとしてレポートに表示したいのです。時間1・時間2・時間3すべて入っているものは3件として

時間1・結果1
時間2・結果2
時間3・結果3

時間1・時間2のみ入っているものは2件として。

ユニオンクエリというのを使うと出来そうですが、よく分かりません。
SQLビューにどのように書けばよろしいでしょうか?

テーブルの構成は今から直すことは出来ない状態で…。

Aベストアンサー

ご推測の通り、ユニオンクエリで対応できます。
基本的には、各レコードに対応する選択クエリに相当するSQL文を、
「Union」で結合するだけですので、覚えてしまえばそれほど
難しくはないかと思います。

1)値が重複するデータがひとつに集約されてよい場合:
Select マスタ.時間1 As 時間, マスタ.結果1 As 結果 From マスタ
Union
Select マスタ.時間2 As 時間, マスタ.結果2 As 結果 From マスタ
Union
Select マスタ.時間3 As 時間, マスタ.結果3 As 結果 From マスタ;

※「Union」の後の改行は、クエリを閉じると自動で削除されます。
※わかりやすさ優先(のつもり)で3つのSelect文の体裁を揃えましたが、
 実際には2行目以降の「As 時間」「As 結果」は無視されます。

2)値が重複するデータも集約せずに表示する場合:
Select マスタ.時間1 As 時間, マスタ.結果1 As 結果 From マスタ
Union All
Select マスタ.時間2 As 時間, マスタ.結果2 As 結果 From マスタ
Union All
Select マスタ.時間3 As 時間, マスタ.結果3 As 結果 From マスタ;

3)「マスタ」テーブルにレコードを特定できる「ID」などがあって、
 それを同時に出力する場合:
Select マスタ.ID As ID, マスタ.時間1 As 時間, マスタ.結果1 As 結果 From マスタ
Union
Select マスタ.ID As ID, マスタ.時間2 As 時間, マスタ.結果2 As 結果 From マスタ
Union
Select マスタ.ID As ID, マスタ.時間3 As 時間, マスタ.結果3 As 結果 From マスタ


・・・以上です。
なお、これらのユニオンクエリを基にしてテーブル作成クエリを組むことも可能ですので、
あわせて参考までに。

ご推測の通り、ユニオンクエリで対応できます。
基本的には、各レコードに対応する選択クエリに相当するSQL文を、
「Union」で結合するだけですので、覚えてしまえばそれほど
難しくはないかと思います。

1)値が重複するデータがひとつに集約されてよい場合:
Select マスタ.時間1 As 時間, マスタ.結果1 As 結果 From マスタ
Union
Select マスタ.時間2 As 時間, マスタ.結果2 As 結果 From マスタ
Union
Select マスタ.時間3 As 時間, マスタ.結果3 As 結果 From マスタ;

※「Union」の後の改行は...続きを読む

Qエクスぺリアについてです。

エクスぺリアについてです。

以前、エクスぺリアの人にメールを送った時に12時間後にメールが届いたということがありました。

現在は改善されていますでしょうか?

Aベストアンサー

ドコモからドコモに送られたのであれば、あまり遅延は遅延は無いかと思いますが、ネットなどからであれば、メールの到着時刻は保障されません。
そればメールと言う物ですので。

エクスペリアの場合、SPメールで無ければ、自分からメールを確認に行かなければなりません。
その確認周期は電話機で設定できますが、メールが無くても確認するだけでパケット料金が発生するシステムになっていますので、確認しない人だと、最悪、メールの確認周期の時間の2倍程度の着信遅れは発生する可能性があります。

また、上にも書いたように、到着の時間は保証されていないのがメールのシステムです。
ネットワークのメールの場合、数日遅れて届くというものもあります。

QAcceseからCSVにエクスポートするマクロを作る

 早速質問です。
 目的はMDBファイルをCSVテキストにエクスポートするマクロ(機能がクリックひとつで実現できるよう)を作ることですが、CSVファイルはカンマで区切って、ダブルクォーテーション(”)が入らないようにすることです。MDBファイルの項目が全部テキスト型なので、手動でテキストファイルにエクスポートするときはダブルクォーテーションが入らないように選択できるが、マクロの”テキスト変換”でやるとテキスト型の項目には自動的にダブルクォーテーションがついてしまうのです。
どうすればいいか具体的に教えていただけたらと願ってます。
 よろしくお願いします。

Aベストアンサー

マクロのアクションにテキスト変換を選ぶと下のプロパティに定義名という項目がありますね。
ここにどのような形式で出力するかの「定義」を指定してやる必要があります。
ではこの「定義」はどうやって作るかと言いますとテーブルをエクスポートする時テキストを選ぶとエクスポートウィザードが起動します。
このウィンドウの「設定...」ボタンをクリックすると定義作成のウィンドウが開きます。
ここで定義をつくり保存します。もちろんダブルクォーテーション無しも指定できます。
このとき付けた名前をマクロで指定するのです。

Q100円の消費税がエクス円 500円の消費税がワイ円 合計は?

100円の消費税がエクス円
500円の消費税がワイ円
合計は?

Aベストアンサー

消費税の合計は、エクス円+ワイ円

Qクエリで2つずつ取り出す方法について

毎度お世話になっております。
WindowsXP、Access2003を使用しております。

以下のテーブル1があります。

[テーブル1]
CODE   日付
 A    20080101
 A    20080102
 A    20080103
 B    20080101
 C    20080101
 C    20080103
 C    20080104

CODEごとに、日付の若いものから2行ずつ、
1つしかないものは1行のみ抽出したいのです。

[希望する結果]
CODE   日付
 A    20080101
 A    20080102
 B    20080101
 C    20080101
 C    20080103

これはクエリで可能なのでしょうか。

ご教授よろしくお願いします。

Aベストアンサー

上記レイアウトでレコードに重複がない場合なら以下で可能です。
SELECT
CODE, 日付
FROM テーブル1 AS t
WHERE (SELECT COUNT(*) FROM テーブル1 WHERE CODE=t.CODE AND 日付<=t.日付)<=2


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報