Excel VBA から Access の クエリ(Query)を実行するには

Excel VBA から Access の クエリ(Query)を実行するには、主に次の2つの方法があります:


目次

✅ 方法1:DAO(Microsoft Access Object Library)を使う

● 特徴:

  • Access のクエリをそのまま実行可能。
  • Access がインストールされている必要あり。
  • クエリ名を指定するだけで簡単に実行可能。

● 事前準備:

  • VBAエディタ > ツール > 参照設定
    Microsoft Access xx.x Object Library にチェックを入れる。

● サンプルコード:

Sub RunAccessQuery_DAO()
    Dim accApp As Object ' Access.Application として定義してもOK
    Dim accDBPath As String
    Dim qryName As String

    accDBPath = "C:\YourPath\YourDatabase.accdb" ' Accessファイルのパス
    qryName = "ユーザー更新クエリ" ' 実行したいクエリ名

    ' Accessを起動
    Set accApp = CreateObject("Access.Application")
    accApp.Visible = False
    accApp.OpenCurrentDatabase accDBPath

    ' クエリを実行
    accApp.DoCmd.SetWarnings False
    accApp.DoCmd.OpenQuery qryName
    accApp.DoCmd.SetWarnings True

    ' 終了処理
    accApp.Quit
    Set accApp = Nothing

    MsgBox "クエリを実行しました。"
End Sub

✅ 方法2:ADODB + SQLでクエリを実行(動的SQL)

● 特徴:

  • Access のクエリ名は実行できないが、SQL 文そのものを直接実行可能。
  • Access を起動せずバックグラウンドでデータ処理が可能。
  • INSERT / UPDATE / DELETE など自由に記述。

● 事前準備:

  • 参照設定で Microsoft ActiveX Data Objects x.x Library を有効にする。

● サンプルコード(UPDATE文):

Sub RunSQL_ADODB()
    Dim conn As Object
    Dim dbPath As String
    Dim sql As String

    dbPath = "C:\YourPath\YourDatabase.accdb"

    ' SQL文(例:user3 のパスワード更新)
    sql = "UPDATE ユーザー SET パスワード = 'newPass123' WHERE ユーザーid = 'user3'"

    Set conn = CreateObject("ADODB.Connection")
    conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath

    conn.Execute sql

    conn.Close
    Set conn = Nothing

    MsgBox "SQL 実行完了"
End Sub

✅ どちらを使うべきか?

条件推奨方法
Access で作成済のクエリを呼びたいDAO + Access.Application
Access を起動せず自動処理したいADODB で SQL を実行
大量データを高速に処理したいADODB(軽量で高速)

よかったらシェアしてね!
目次