目次
パラメータクエリの結果をCSVファイルで出力
こんにちは。伊川(@naonaoke)です。
前回、上の記事で、ACCESSからCSVファイルで一発出力をする方法を紹介しました。
前回は、すべてのレコードを出力しました。
その方法だと、大量にデータがあるときは、不便です。
ACCESSはカンタンにお好みのデータを抽出する方法があります。
それが、パラメータクエリです。
このパラメータクエリを利用して、CSVファイルで転送します。
パラメータクエリを利用
いつも、クエリのデザイングリットでパラメータクエリを設定します。
今回は、VBAでパラメータクエリを呼び出します。
また、VBAでSQL文を記載します。
VBAでSQL文を実行するには、上の記事を参照してください。
- 抽出用のフォームを作成する
- VBAでパラメータクエリを呼び出す
- 抽出結果をCSVへ転記
- 同一フォルダへ自動保存
パラメータクエリでCSVへ転送 作業手順 その1 データベースを確認
抽出専用のフォームを作成します。
専用フォームの作成の方法は、ここでは割愛します。
パラメータクエリでCSVへ転送 作業手順 その2 コードを解説
今回利用する変数
Dim rs As DAO.Recordset
Dim dq As DAO.QueryDef
Dim stSQL As String
データベース型の変数を宣言
Set db = CurrentDb()
Database型の変数dbを宣言し、カレントデータベースオブジェクト「CurrentDb」を
参照する変数dbにセットします。
Set rs = db.OpenRecordset(“Q_フォーミュラ”, dbOpenDynaset)
Q_フォーミュラを参照します。
パラメータクエリをVBAで呼び出す
stSQL = “PARAMETERS[所属チームを入力] Text; SELECT * ” _
FROM Q_フォーミュラ WHERE 所属チーム=[所属チームを入力]
Set dq = db.CreateQueryDef(“パラメータDAO”, stSQL)
dq.SQL = stSQL
Dim dq As DAO.QueryDef
QueryDefは、クエリを定義する場合に使用するオブジェクト
CreateQueryDefメソッドで、データベースにクエリを作成し、変数dqにセットします。
転送コード
DoCmd.TransferText acExportDelim, , “パラメータDAO”, _
TransferTextは、転送を命令するコードです。
acExportDelim,
項目間の区切り文字をカッコつけて言ったのが「デリミタ」です。
項目と項目の間をぶった切ってくれています。
相対パスのコード
CurrentProject.Path & “\” & Me.所属チーム & “.csv”, True, “”
現在のデータベースファイルが格納されているフォルダを参照します。
作成したクエリを削除
DoCmd.DeleteObject acQuery, “パラメータDAO”
必要なデータが抽出された後、「所属チーム」クエリを削除します。
この処理をしていないと、再度「所属チーム」に抽出したいデータを入力して「実行」ボタンをクリックした場合、「すでに’所属チームクエリが存在する」のメッセージが出てエラーになります。
そこで、一度作成した「クエリ(所属チーム)」を削除しておく必要があります。
変数を解放し、MsgBoxで、処理完了を知らせる
Set rs = Nothing
Set db = Nothing
MsgBox& Me.所属チーム & “を出力しました”
パラメータクエリでCSVへ転送 作業手順 その3 完成コード
ここがポイント
単一の条件で抽出するコードです。この方法は、定例のミーティング等で、資料を作成する時等、便利です。もちろん、ACCESSのレポートを利用する事もできますが、Excelのほうが装飾はカンタンです。
まとめ
今回のコードは、私も実務で利用しています。
ぜひ、みなさんも実務で利用してください。
今回のサンプルファイルは、No152です。
わからない事を延々と考えるのは、無駄です。
- なんで作動かないの?
- もうやだ!VBAなんか嫌い!
- ネットで調べても情報がない!
必ず作動するコードが、ここにあります。