【ExcelVBA】ExcelのマクロからMicrosoft AccessのテーブルデータをCSVファイルにエクスポートするには?①

本記事では、ExcelのマクロからMicrosoft Access(以下、Access)のテーブルデータをCSVファイルにエクスポートする方法についてご説明します。

【動画】ExcelのマクロからAccessのテーブルにCSVファイルのデータをエクスポートする実際の動き

本題に入る前に、まずは次のツイートをご覧ください。

Access側のマクロが、TransferTextメソッドを呼び出しています。

TransferTextメソッドはAccessのテーブルデータをCSVファイルにエクスポートします。

そのAccess側のマクロを、Excel側のマクロが呼び出しています。

ExcelのマクロからAccessのテーブルデータをCSVファイルにエクスポートする方法

ExcelのマクロからAccessのテーブルデータをCSVファイルにエクスポートするには、次の流れの通りにコードを書いていきます。

Excel側のマクロ

STEP.1
CSVファイルにテーブルデータをエクスポートするAccessのファイル名の取得
CSVファイルにテーブルデータをエクスポートするAccessのファイル名を取得します。
STEP.2
AccessのテーブルデータをエクスポートするCSVファイル名の取得
AccessのテーブルデータをエクスポートするCSVファイル名を取得します。
STEP.3
CSVファイルにエクスポートするAccessのテーブル名の取得
CSVファイルにエクスポートするAccessのテーブル名を取得します。
STEP.4
Accessへの接続情報の取得
Accessへの接続情報を取得します。
STEP.5
Accessに接続
Accessに接続します。
STEP.6
Accessのファイルを開く
Accessのファイルを開きます。
STEP.7
Accessのマクロを呼び出す
RunメソッドでAccessのマクロを呼び出します。
Runメソッドの第1パラメタはAccessのマクロ名、2つ目以降はAccessのマクロのパラメタです。

Access側のマクロ

STEP.1
AccessのテーブルデータをCSVファイルにエクスポート
AccessのテーブルデータをCSVファイルにエクスポートします。
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」ボタンをクリックします。

  1. Microsoft ActiveX Data Objects 2.8 Library(msado28.tlb)
  2. 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週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。

→ TechAcademyの「1週間 無料体験」はこちら