Excel VBA + ADO を使った Accessデータベースの更新(UPDATE)クエリ の方法を、パラメータクエリ方式で詳しく解説します。
目次
✅ やりたいこと(例)
「Users
テーブルの Name
を "山田太郎"
に変更する。ただし、ID=1001
のレコードだけ更新する」
🧩 コード全体:UPDATE パラメータクエリのサンプル
Sub UpdateUserName() Dim conn As ADODB.Connection Dim cmd As ADODB.Command Dim dbPath As String dbPath = "C:\YourPath\YourDatabase.accdb" ' ADO接続 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 = "UPDATE Users SET Name = ? WHERE ID = ?" cmd.CommandType = adCmdText ' パラメータの追加(順番に注意) cmd.Parameters.Append cmd.CreateParameter("Name", adVarWChar, adParamInput, 50, "山田太郎") 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
🔍 解説ポイント
部分 | 解説 |
---|---|
cmd.CommandText = "UPDATE Users SET Name = ? WHERE ID = ?" | プレースホルダ ? を使う |
.CreateParameter("Name", adVarWChar, adParamInput, 50, "山田太郎") | Name に更新する値(文字列) |
.CreateParameter("ID", adInteger, adParamInput, , 1001) | 条件となる主キー ID |
cmd.Execute | 実行して、影響を受けた行数(更新件数)を返す |
📌 よく使う CreateParameter
の型
データ型 | 定数 | 例 |
---|---|---|
数値 | adInteger | 1001 |
文字列 | adVarChar , adVarWChar | “田中” |
日付 | adDate | #2025/07/21# |
真偽値 | adBoolean | True, False |
⚠ よくあるミス
ミス例 | 対処法 |
---|---|
パラメータの数や順序が一致しない | ? の順番に正しく .Append する |
データ型が合っていない | adInteger や adVarWChar を使い分ける |
CommandTypeの指定漏れ | cmd.CommandType = adCmdText を必ず書く |
ファイルが開きっぱなしで更新できない | 他のユーザーやExcelで開かれていないか確認 |
🧪 応用例:複数列を更新する
cmd.CommandText = "UPDATE Users SET Name = ?, Age = ? WHERE ID = ?" cmd.Parameters.Append cmd.CreateParameter("Name", adVarWChar, adParamInput, 50, "佐藤花子") cmd.Parameters.Append cmd.CreateParameter("Age", adInteger, adParamInput, , 30) cmd.Parameters.Append cmd.CreateParameter("ID", adInteger, adParamInput, , 1002)