この記事では、ExcelのマクロからMicrosoft Access(以下、Access)のテーブルデータをCSVファイルにエクスポートする方法についてご説明します。
【動画】ExcelのマクロからAccessのテーブルデータをCSVファイルにエクスポートする実際の動き
本題に入る前に、まずは次のツイートをご覧ください。
AccessのテーブルデータをCSVファイルにエクスポートする処理を動画に撮ってみました😊
AccessのDoCmdオブジェクトのTransferTextメソッドを、Excelのマクロが呼び出しています。
Access側はマクロを使っておらず、ノーコードです。
Excelのマクロで処理を完結させています。#ExcelVBA pic.twitter.com/sbbnkJIqvi— まさ@Excel、VBA、マクロ(経験年数16年) (@masamasa9785) July 29, 2021
AccessのDoCmdオブジェクトのTransferTextメソッドを、Excelのマクロが呼び出しています。
TransferTextメソッドはAccessのテーブルデータをCSVファイルにエクスポートするメソッドです。
ExcelのマクロからAccessのテーブルデータをCSVファイルにエクスポートする方法
ExcelのマクロからAccessのテーブルデータをCSVファイルにエクスポートするには、次の流れの通りにコードを書いていきます。
Excelのマクロ
CSVファイルへのエクスポートは、TransferTextメソッドを使います。
コードの例
Excel側のマクロのコード(例)
Dim strFileName As String, strSql As String, CSVFile As String, impTbl As String Dim adoCON As New ADODB.Connection Dim accApp As New Access.Application 'カレントディレクトリのAccessファイル名を取得 strFileName = ActiveWorkbook.Path & "\" & "0058.mdb" 'エクスポートするCSVファイル名を取得 CSVFile = ActiveWorkbook.Path & "\" & "出力データ.csv" 'CSVファイルにデータをエクスポートするAccessのテーブル名を取得 impTbl = "tbl_score_list" 'Microsoft Accessへの接続情報を取得する adoCON.ConnectionString = "provider=Microsoft.ACE.OLEDB.12.0;" _ & "Data Source=" _ & strFileName & "" 'Accessに接続する adoCON.Open 'Accessファイルを開く Set accApp = GetObject(strFileName) 'AccessのテーブルデータをCSVファイルにエクスポートする accApp.DoCmd.TransferText acExportDelim, , impTbl, CSVFile, True '後処理 Set adoCON = Nothing Set accApp = Nothing
コードの解説
注目すべきコード①
最初に見て頂きたいのは26行目です。
AccessのDoCmdオブジェクトのTransferTextメソッドをExcelのマクロが呼び出しています。
TransferTextメソッドはAccessのテーブルデータをCSVファイルにエクスポートするメソッドです。
TransferTextメソッドを実行するのに、デリミタの種類やCSVファイル名、テーブル名などをパラメタに指定します。
ExcelのマクロがなぜAccessのDoCmdオブジェクトのメソッドを実行することができるのか、その仕組みは次の「注目すべきコード②」の説明をご覧ください。
注目すべきコード②
次に見て頂きたいのは23行目です。
GetObject関数にAccessのファイル名をパラメタに指定して実行するとAccessファイルが開きます。
また、GetObject関数を実行することでオブジェクトが生成されて、AccessのDoCmdオブジェクトのメソッドが使えるようになります。
注目すべきコード③
次に見て頂きたいのは20行目です。
ここでExcelのマクロがAccessに接続します。
Accessに接続するのに必要な情報を15行目で取得して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のファイルを起動(表示)
- ③AccessのDoCmdオブジェクトのTransferTextメソッドをExcelのマクロが呼び出し、AccessのテーブルデータをCSVファイルにエクスポート
ExcelのマクロからAccessのテーブルデータをCSVファイルにエクスポートしたい場合は、ぜひ参考にしてみてくださいね。
プログラミングのスキルを習得するなら
プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。
プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。