外部連携 × SQL実行(ADO)
Excel VBAから外部データベースに接続して SQL文を実行 することで、データの取得・更新・削除が可能になります。
初心者向けに、コード例やテンプレートをかみ砕いて説明します。
基本の考え方
- SQL実行とは?
データベースに対して「SELECT」「INSERT」「UPDATE」「DELETE」などの命令を送ること。 - ADO接続の流れ:
ConnectionオブジェクトでDBに接続ExecuteメソッドでSQLを実行- 結果を
Recordsetで受け取る(SELECTの場合) - 終了処理で接続を閉じる
テンプレ1:SELECT文でデータ取得
Sub SQL_Select()
Dim conn As Object
Dim rs As Object
Dim sql As String
Dim ws As Worksheet: Set ws = Worksheets("Data")
' 接続オブジェクト作成
Set conn = CreateObject("ADODB.Connection")
' 接続文字列(例:Accessデータベース)
conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\temp\sample.accdb;"
conn.Open
' SQL文
sql = "SELECT * FROM Customers"
' SQL実行 → Recordsetに結果を格納
Set rs = conn.Execute(sql)
' シートに展開
ws.Cells.Clear
ws.Range("A1").CopyFromRecordset rs
' 終了処理
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing
MsgBox "SELECT文を実行してデータを取得しました!"
End Sub
VB- ポイント:
conn.Execute(sql)でSQLを実行。- SELECT文は結果を
Recordsetに格納。 CopyFromRecordsetで一括展開できる。
テンプレ2:INSERT文でデータ追加
Sub SQL_Insert()
Dim conn As Object
Dim sql As String
Set conn = CreateObject("ADODB.Connection")
conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\temp\sample.accdb;"
conn.Open
' SQL文(新しいレコードを追加)
sql = "INSERT INTO Customers (Name, Age) VALUES ('佐藤', 28)"
conn.Execute sql
conn.Close
Set conn = Nothing
MsgBox "INSERT文を実行してデータを追加しました!"
End Sub
VB- ポイント:
ExecuteでINSERT文を実行。- 結果は返さないのでRecordsetは不要。
テンプレ3:UPDATE文でデータ更新
Sub SQL_Update()
Dim conn As Object
Dim sql As String
Set conn = CreateObject("ADODB.Connection")
conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\temp\sample.accdb;"
conn.Open
' SQL文(既存レコードを更新)
sql = "UPDATE Customers SET Age = 30 WHERE Name = '佐藤'"
conn.Execute sql
conn.Close
Set conn = Nothing
MsgBox "UPDATE文を実行してデータを更新しました!"
End Sub
VB- ポイント:
- 条件付きで特定レコードを更新。
- WHERE句を忘れると全件更新になるので注意。
テンプレ4:DELETE文でデータ削除
Sub SQL_Delete()
Dim conn As Object
Dim sql As String
Set conn = CreateObject("ADODB.Connection")
conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\temp\sample.accdb;"
conn.Open
' SQL文(特定レコードを削除)
sql = "DELETE FROM Customers WHERE Name = '佐藤'"
conn.Execute sql
conn.Close
Set conn = Nothing
MsgBox "DELETE文を実行してデータを削除しました!"
End Sub
VB- ポイント:
- WHERE句で削除対象を絞る。
- 条件なしDELETEは全件削除になるので要注意。
例題で練習
'例1:SELECT文でテーブルを読み込む
'例2:INSERT文で新しい顧客を追加
'例3:UPDATE文で顧客の年齢を変更
'例4:DELETE文で顧客を削除
VB初心者向けポイント
- SQL文は文字列として組み立てる →
"SELECT * FROM テーブル名"のように書く。 - SELECTはRecordsetで結果を受け取る → Excelに展開可能。
- INSERT/UPDATE/DELETEはExecuteだけでOK → 結果は返さない。
- WHERE句を忘れると全件更新/削除になる → 実務で最も注意すべき点。
- 終了処理を必ず行う →
rs.Close、conn.Close。
👉 この「外部連携 × SQL実行テンプレ」を覚えておけば、Excel VBAで 外部データベースと連携し、データの取得・追加・更新・削除を自在に行う処理 を簡単に作成できます。
