本記事では、ExcelのマクロからMicrosoft Access(以下、Access)のテーブルデータをCSVファイルにエクスポートする方法についてご説明します。
【動画】ExcelのマクロからAccessのテーブルにCSVファイルのデータをエクスポートする実際の動き
本題に入る前に、まずは次のツイートをご覧ください。
AccessのテーブルのデータをCSVファイルに出力する処理を動画に撮ってみました😊
AccessのテーブルのデータをCSVファイルに出力する処理はAccessのマクロ側で、そのマクロをExcelのマクロが呼び出しています😃
※TransferTextメソッド使用#ExcelVBA#AccessVBA pic.twitter.com/6wox9jdcY0— まさ@Excel、VBA、マクロ(経験年数16年) (@masamasa9785) July 26, 2021
Access側のマクロが、TransferTextメソッドを呼び出しています。
TransferTextメソッドはAccessのテーブルデータをCSVファイルにエクスポートします。
そのAccess側のマクロを、Excel側のマクロが呼び出しています。
ExcelのマクロからAccessのテーブルデータをCSVファイルにエクスポートする方法
ExcelのマクロからAccessのテーブルデータをCSVファイルにエクスポートするには、次の流れの通りにコードを書いていきます。
Excel側のマクロ
Runメソッドの第1パラメタはAccessのマクロ名、2つ目以降はAccessのマクロのパラメタです。
Access側のマクロ
CSVファイルへのエクスポートは、TransferTextメソッドを使います。
コードの例
Excel側のマクロのコード(例)
Dim strDBName As String, strSql As String, CSVFile As String, impTbl As String, accMscro As String Dim adoCON As New ADODB.Connection Dim accApp As New Access.Application 'カレントディレクトリのデータベースパスを取得 strDBName = ActiveWorkbook.Path & "\" & "0055.mdb" 'カレントディレクトリのCSVファイル名を取得 CSVFile = ActiveWorkbook.Path & "\" & "出力データ.csv" 'CSVファイルのデータをエクスポートするテーブル名を取得 impTbl = "tbl_score_list" 'Accessへの接続情報を取得する adoCON.ConnectionString = "provider=Microsoft.ACE.OLEDB.12.0;" _ & "Data Source=" _ & strDBName & "" 'Accessに接続する adoCON.Open 'Accessファイルを開く Set accApp = GetObject(strDBName) 'Accessのマクロ名を取得する accMscro = "macro1" 'Accessのマクロを呼び出す accApp.Run accMscro, impTbl, CSVFile '後処理 Set adoCON = Nothing Set accApp = Nothing
コードの解説
注目すべきコード①
最初に見て頂きたいのは31行目です。
RunメソッドでAccessのマクロを呼び出します。
Runメソッドの第1パラメタはAccessのマクロ名、2つ目以降は第1パラメタで指定したAccessのマクロのパラメタになります。
Excel側のマクロがAccess側のマクロを呼び出す際は、このAccess側のマクロとそのマクロに必要なパラメタを指定しましょう。
注目すべきコード②
次に見て頂きたいのは25行目です。
GetObject関数にAccessのファイル名をパラメタに指定することで、Accessファイルが開きます。
Accessファイルを開くと、Accessファイルのマクロを呼び出すことができます。
注目すべきコード③
次に見て頂きたいのは22行目です。
ここでExcelのマクロがAccessに接続します。
Accessに接続するのに必要な情報を17行目で取得してAccessに接続します。
DoCmdオブジェクトのTransferTextメソッドで、AccessのテーブルデータをCSVファイルにエクスポートしています。
Access側のマクロのコード(例)
'CSVファイルのデータをテーブルにエクスポートする DoCmd.TransferText acExportDelim, , "tbl_score_list", CSVFile, True
コードの解説
注目すべきコード
最初に見て頂きたいのは2行目です。
DoCmdオブジェクトのTransferTextメソッドで、AccessのテーブルデータをCSVファイルにエクスポートしています。
【注意】参照設定が必要です
一つ注意点があるのですが、先ほどのExcelのコードを動かすには参照設定が必要です。(Access側は必要ありません)
参照設定の一覧(下の画像を参考)から次の項目(ライブラリ)にチェックを付けて「OK」ボタンをクリックします。
- Microsoft ActiveX Data Objects 2.8 Library(msado28.tlb)
- Microsoft Access 15.0 Object Library(MSACC.OLB)
なぜ必要かというと、先ほどのコードの2行目の「ADODB.Connection」というオブジェクトが「msado28.tlb」というファイルを、3行目の「Access.Application」が「MSACC.OLB」というファイルを参照するからです。
Dim adoCON As New ADODB.Connection Dim accApp As New Access.Application
この参照設定をしないと下の画像のエラーが出ますので必ず行う必要があります。
ここでは「msado28.tlb」と「MSACC.OLB」とは何者かについては記事の本題から逸れてしまうので詳細は割愛しますが、Excelのマクロで「ADODB.Connection」と「Access.Application」というオブジェクトを使う場合は参照設定しないと動かない、程度に思って頂ければと思います。
最後に
本記事では、ExcelのマクロからAccessのテーブルデータをCSVファイルにエクスポートする方法についてご説明しました。
ExcelのマクロからAccessのテーブルデータをCSVファイルにエクスポートする流れは次の通りです。
- ①Excel側のマクロがAccessのファイルに接続
- ②GetObject関数を使ってAccessのファイルを起動(表示)
- ③Excel側のマクロがAccessのマクロを呼び出す
- ④ ③のAccessのマクロでTransferTextメソッドを実行し、AccessのテーブルデータをCSVファイルにエクスポート
ExcelのマクロからAccessのテーブルデータをCSVファイルにエクスポートしたい場合は、ぜひ参考にしてみてくださいね。
プログラミングのスキルを習得するなら
プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。
プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。