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(軽量で高速) |