Excel VBA 逆引き集 | SQL実行

Excel VBA
スポンサーリンク

外部連携 × SQL実行(ADO)

Excel VBAから外部データベースに接続して SQL文を実行 することで、データの取得・更新・削除が可能になります。
初心者向けに、コード例やテンプレートをかみ砕いて説明します。


基本の考え方

  • SQL実行とは?
    データベースに対して「SELECT」「INSERT」「UPDATE」「DELETE」などの命令を送ること。
  • ADO接続の流れ:
    1. Connection オブジェクトでDBに接続
    2. Execute メソッドでSQLを実行
    3. 結果を Recordset で受け取る(SELECTの場合)
    4. 終了処理で接続を閉じる

テンプレ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.Closeconn.Close

👉 この「外部連携 × SQL実行テンプレ」を覚えておけば、Excel VBAで 外部データベースと連携し、データの取得・追加・更新・削除を自在に行う処理 を簡単に作成できます。

タイトルとURLをコピーしました