この記事では、閉じているAccessのデータベースからクエリの中身をテキストファイルに保存する方法についてご説明します。
【動画】閉じているAccessのデータベースからクエリの中身をテキストファイルに保存する実際の動き
本題に入る前に、まずは次の動画をご覧ください。
QueryDefオブジェクトのインスタンスを生成し、Accessのデータベースからクエリの中身を取得しています。
クエリの中身はSqlプロパティを使い、テキストファイルを用意してそのテキストファイルに書き込んで保存しています。
マクロ作成の流れ
コードの例
Excelのマクロのコード(例)
Option Explicit Sub test() Dim accDBNM As String 'Accessのデータベースファイル Dim db As Object 'Databaseオブジェクト変数 Dim dbe As Object 'DBEngineオブジェクト変数 Dim qdf As Object 'QueryDefオブジェクト用変数 Dim cnt As Integer 'カウンタ用変数 Dim exportFilePath As String 'クエリの中身を書き出すファイルの出力先 'カレントディレクトリのデータベースパスを取得 accDBNM = ActiveWorkbook.Path & "\" & "0173.mdb" 'クエリの中身を書き出すファイルの出力先を取得する exportFilePath = ThisWorkbook.Path & "\" & "query" & "\" 'カウンタを初期化する cnt = 1 'DBEngineオブジェクトのインスタンスを生成する Set dbe = New DAO.DBEngine 'Accessのデータベースを開く Set db = dbe.OpenDatabase(accDBNM) 'クエリの数だけ処理を繰り返すループ For Each qdf In db.QueryDefs '書き込むファイルを開く Open exportFilePath & qdf.Name & ".txt" For Append As #1 'クエリの中身を書き込む Print #1, qdf.Sql 'ファイルを閉じる Close #1 cnt = cnt + 1 Next 'データベースを閉じる db.Close '後処理 Set db = Nothing Set dbe = Nothing Set qdf = Nothing End Sub
注目すべきコード①
最初に見て頂きたいのは13行目から16行目です。
'カレントディレクトリのデータベースパスを取得 accDBNM = ActiveWorkbook.Path & "\" & "0173.mdb" 'クエリの中身を書き出すファイルの出力先を取得する exportFilePath = ThisWorkbook.Path & "\" & "query" & "\"
以上のコードは、Accessのデータベースのファイルの格納先の取得とクエリの中身を書き出すファイルの出力先を取得するコードです。
注目すべきコード②
次に見て頂きたいのは22行目から25行目です。
'DBEngineオブジェクトのインスタンスを生成する Set dbe = New DAO.DBEngine 'Accessのデータベースを開く Set db = dbe.OpenDatabase(accDBNM)
以上のコードは、DBEngineオブジェクトのインスタンスを生成し、Accessのデータベースを開くコードです。
Accessのデータベースを開くことで、クエリの中身を参照・取得できるようになります。
注目すべきコード③
次に見て頂きたいのは28行目から41行目です。
'クエリの数だけ処理を繰り返すループ For Each qdf In db.QueryDefs '書き込むファイルを開く Open exportFilePath & qdf.Name & ".txt" For Append As #1 'クエリの中身を書き込む Print #1, qdf.Sql 'ファイルを閉じる Close #1 cnt = cnt + 1 Next
以上のコードは、クエリの数だけそのクエリの中身をテキストファイルに書き込む処理のコードです。
28行目のコードは、クエリの数だけ処理を繰り返すループのFOR文です。
31行目のコードは、クエリの中身を書き込むテキストファイルを生成してそのテキストファイルを開き、34行目でクエリの中身をテキストファイルに書きこみます。
動作確認
マクロ実行前
以下のAccessのデータベースにクエリが3つ登録されており、このクエリの数だけその中身をテキストファイルに出力します。
マクロ実行後
マクロを実行すると、以下のテキストファイルが生成されます。
テキストファイルの中身は次の通りです。
クエリの中身がテキストファイルに出力されていることが確認できました。
【注意】参照設定が必要です
一つ注意点があるのですが、先ほどのコードを動かすには参照設定が必要です。
参照設定の一覧(下の画像を参考)から次の項目(ライブラリ)にチェックを付けて「OK」ボタンをクリックします。
- microsoft office 15.0 access database engine object library(ACEDAO.DLL)
なぜ必要かというと、Excelのマクロのコードの18行目の「DAO.DBEngine」というオブジェクトが「ACEDAO.DLL」というファイルを参照するからです。
'DBEngineオブジェクトのインスタンスを生成する Set dbe = New DAO.DBEngine
この参照設定をしないと下の画像のエラーが出ますので必ず行う必要があります。
ここでは「ACEDAO.DLL」とは何者かについては記事の本題から逸れてしまうので詳細は割愛しますが、マクロで「DAO.DBEngine」というオブジェクトを使う場合は参照設定しないと動かない、程度に思って頂ければと思います。
最後に
本記事では、閉じているAccessのデータベースからクエリの中身をテキストファイルに保存する方法についてご説明しました。
Accessのクエリの中身をお手軽に確認したい時は本記事を参考にしてみてくださいね。
Excelのスキル向上やExcelの基礎知識をしっかりと学びたいなら
Excelのスキルを習得したい、Excelの基礎知識をもっと理解したい、そう考えているなら「無期限サポート付きExcel講座【すごい改善】」がおすすめです。
Excelのスキルの基礎を身につけるなら【すごい改善】で無期限サポート付きがあるので、これで「Excelのスキルや基礎」を学ぶのにおすすめですよ。