Excel VBA + ADO を使った Access データベースの削除(DELETE)処理の「パラメータクエリ」

Excel VBA + ADO を使った Access データベースの削除(DELETE)処理の「パラメータクエリ」例を紹介します。
特定の条件に一致するレコードを安全に削除したいときに有効です。


目次

✅ やりたいこと(例)

Users テーブルから、ID=1001 のレコードを削除する」


🧩 DELETE パラメータクエリのコード例

Sub DeleteUserRecord()
    Dim conn As ADODB.Connection
    Dim cmd As ADODB.Command
    Dim dbPath As String

    dbPath = "C:\YourPath\YourDatabase.accdb" ' ←自分のファイルパスに変更

    ' 接続オブジェクト作成と接続
    Set conn = New ADODB.Connection
    conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
              "Data Source=" & dbPath & ";" & _
              "Persist Security Info=False;"

    ' Commandオブジェクト作成
    Set cmd = New ADODB.Command
    Set cmd.ActiveConnection = conn
    cmd.CommandText = "DELETE FROM Users WHERE ID = ?"
    cmd.CommandType = adCmdText

    ' パラメータの追加
    cmd.Parameters.Append cmd.CreateParameter("ID", adInteger, adParamInput, , 1001)

    ' クエリの実行
    Dim affected As Long
    affected = cmd.Execute

    MsgBox affected & " 件のレコードを削除しました。"

    ' 後処理
    conn.Close
    Set cmd = Nothing
    Set conn = Nothing
End Sub

🔍 補足解説

要素解説
DELETE FROM Users WHERE ID = ?? プレースホルダを使った削除クエリ
cmd.CreateParameter("ID", adInteger, adParamInput, , 1001)削除条件の ID を指定
affected = cmd.Execute実際に削除されたレコード数を取得

⚠ 注意点

項目説明
レコードは復元できないうっかり全件削除しないように、WHERE句必須
ファイルのロックに注意Accessファイルが別のプログラムで開かれていると削除できないことがある
パラメータの順番? の順番に Append する必要あり(名前は意味を持たない)

🧪 応用:複数条件で削除

cmd.CommandText = "DELETE FROM Users WHERE ID = ? AND Name = ?"
cmd.Parameters.Append cmd.CreateParameter("ID", adInteger, adParamInput, , 1002)
cmd.Parameters.Append cmd.CreateParameter("Name", adVarWChar, adParamInput, 50, "佐藤花子")

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