Accessの機能の1つとしてテーブルに蓄積したデータをCSVに出力することができます。
今回は、VBAでQueryDefsを作成してテーブルの特定項目のみをCSV出力する方法についてご紹介します。
<今回やること>
1.VBAでQueryDefsを作成しクエリーを作成
2.クエリーのデータをCSVに出力
3.1で作成したクエリーを削除
1.VBAでQueryDefsを作成しクエリーを作成
2.クエリーのデータをCSVに出力
3.1で作成したクエリーを削除
参考:QueryDefsとは
QueryDefsとは
VBAでQueryDefsを作成するとイメージとしてはクエリを作成することができます。
予めクエリを作成しておく・・という事も可能ですが
VBAで実行することにより、メンテナンスもVBAだけで良くなったり
より詳細な絞込みを行ったり出力する項目の制御を行ったりできます。
画面にボタンとテキストを追加
画面にボタンとテキストを配置します。

テキスト
名前:txt受付日
書式:日付 (S)
ボタン
名前:cmdCSV出力
表題:CSVファイル出力
cmdCSV出力ボタンのクリックイベント
Rem ----------------------------------------------------------------------------------
Rem Click/CSV出力
Rem ----------------------------------------------------------------------------------
Private Sub cmdCSV出力_Click()
Dim strSql As String
Dim sMsg As String
Dim strNowTime As String
Dim strFilePath As String
Dim strSaveDir As String
Dim db As Database
Dim qd As QueryDef
On Error GoTo Error
sMsg = "CSV出力します。よろしいですか?"
If MsgBox(sMsg, vbInformation + vbYesNo + vbDefaultButton2, C_MSG_TITLE) = vbNo Then
Exit Sub
End If
Me.Requery
'--------------------
' 出力処理
'--------------------
' 出力ディレクトリ
strSaveDir = MyPath & "\csv\"
If Dir(strSaveDir, vbDirectory) = "" Then
MkDir strSaveDir
End If
' タイムスタンプ取得
strNowTime = Format(Date, "yymmdd") & "" & Format(Time, "hhnnss")
' ファイル保存先
strFilePath = strSaveDir & "受付_" & strNowTime & ".csv"
strSql = "SELECT"
strSql = strSql & " uke_id AS 受付ID"
strSql = strSql & " ,uke_no AS 受付番号"
strSql = strSql & " ,shuso_div AS 区分"
strSql = strSql & " ,uke_tanto_name AS 受付者"
strSql = strSql & " ,tanto_name AS 担当者"
strSql = strSql & " ,uke_date AS 受付日"
strSql = strSql & " ,uke_date2 AS 受付日2"
strSql = strSql & " ,uke_div AS 受付区分"
strSql = strSql & " ,uke_other_memo AS 受付区分その他"
strSql = strSql & " FROM"
strSql = strSql & " t_uke "
If Me.txt受付日.Value <> "" Then
strSql = strSql & " WHERE uke_date >= #" & CDate(Me.txt受付日.Value) & "#"
End If
strSql = strSql & " ORDER BY uke_date"
Set db = CurrentDb
'--------------------
' QueryDefs作成
'--------------------
Set qd = db.CreateQueryDef("Q_CSV", "SELECT * FROM t_uke")
Set qd = Nothing
'--------------------
' CSV出力
'--------------------
db.QueryDefs![Q_CSV].SQL = strSql
DoCmd.TransferText acExportDelim, , "Q_CSV", strFilePath, True
'--------------------
' QueryDefs削除
'--------------------
db.QueryDefs.Delete "Q_CSV"
db.Close 'dbsをクローズ
Set db = Nothing 'dbsを開放
MsgBox "CSV出力をしました。", vbInformation + vbOKOnly, C_MSG_TITLE
Exit Sub
Error:
MsgBox "エラーが発生しました。エラー内容:" & Err.Description & Chr$(10), vbCritical, C_MSG_TITLE
End Sub
実際に動作確認


出力ファイルは実行ファイルのAccessがあったフォルダの下にCSVフォルダが追加されて出力されます

出力される項目はテーブルの全データではなく特定の項目を出力しています

元となるテーブルは下記で紹介したテーブルを使用しています。
【lesson1-1】AccessVBAでリンクテーブルの制御を行う方法(サンプルダウンロード可能)
よろしければダウンロードしてカスタマイズして試してみてください。


コメント