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