Excel VBA 逆引き集 | 外部DB(ADO接続)

Excel VBA
スポンサーリンク

外部連携 × 外部DB(ADO接続)の基本

Excel VBAでは、ADO(ActiveX Data Objects) を使うことで外部データベース(SQL Server、Oracle、Access、MySQLなど)に接続してデータを取得・更新できます。
初心者向けに、コード例やテンプレートをかみ砕いて説明します。


基本の考え方

  • ADOとは?
    Microsoftが提供するデータアクセス技術。VBAから外部DBに接続してSQLを実行できる。
  • 流れ:
    1. 接続文字列(ConnectionString)を指定してDBに接続
    2. SQL文を実行
    3. 結果をRecordsetで受け取り、Excelに展開
    4. 必要に応じて更新や削除も可能

テンプレ1:SQL Serverに接続してデータ取得

Sub Connect_SQLServer()
    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")
    
    ' 接続文字列(例:SQL Server)
    conn.ConnectionString = "Provider=SQLOLEDB;" & _
                            "Data Source=サーバー名;" & _
                            "Initial Catalog=データベース名;" & _
                            "User ID=ユーザー名;" & _
                            "Password=パスワード;"
    conn.Open
    
    ' SQL文
    sql = "SELECT TOP 10 * FROM Users"
    
    ' Recordsetに結果を格納
    Set rs = conn.Execute(sql)
    
    ' シートに展開
    ws.Cells.Clear
    Dim i As Long
    For i = 0 To rs.Fields.Count - 1
        ws.Cells(1, i + 1).Value = rs.Fields(i).Name
    Next i
    
    Dim rowCount As Long: rowCount = 2
    Do Until rs.EOF
        For i = 0 To rs.Fields.Count - 1
            ws.Cells(rowCount, i + 1).Value = rs.Fields(i).Value
        Next i
        rowCount = rowCount + 1
        rs.MoveNext
    Loop
    
    ' 終了処理
    rs.Close
    conn.Close
    Set rs = Nothing
    Set conn = Nothing
    
    MsgBox "SQL Serverからデータを取得しました!"
End Sub
VB
  • ポイント:
    • Provider=SQLOLEDB でSQL Serverに接続。
    • Recordset をループしてシートに展開。

テンプレ2:Accessデータベースに接続

Sub Connect_Access()
    Dim conn As Object, rs As Object
    Dim sql As String
    Dim ws As Worksheet: Set ws = Worksheets("Data")
    
    Set conn = CreateObject("ADODB.Connection")
    conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                            "Data Source=C:\temp\sample.accdb;"
    conn.Open
    
    sql = "SELECT * FROM Customers"
    Set rs = conn.Execute(sql)
    
    ws.Cells.Clear
    ws.Range("A1").CopyFromRecordset rs
    
    rs.Close
    conn.Close
    MsgBox "Accessからデータを取得しました!"
End Sub
VB
  • ポイント:
    • Accessの場合は Provider=Microsoft.ACE.OLEDB.12.0 を利用。
    • CopyFromRecordset で一括展開できる。

テンプレ3:MySQLに接続(ODBC利用)

Sub Connect_MySQL()
    Dim conn As Object, rs As Object
    Dim sql As String
    Dim ws As Worksheet: Set ws = Worksheets("Data")
    
    Set conn = CreateObject("ADODB.Connection")
    conn.ConnectionString = "Driver={MySQL ODBC 8.0 Driver};" & _
                            "Server=localhost;" & _
                            "Database=testdb;" & _
                            "User=root;" & _
                            "Password=pass;" & _
                            "Option=3;"
    conn.Open
    
    sql = "SELECT * FROM products LIMIT 10"
    Set rs = conn.Execute(sql)
    
    ws.Cells.Clear
    ws.Range("A1").CopyFromRecordset rs
    
    rs.Close
    conn.Close
    MsgBox "MySQLからデータを取得しました!"
End Sub
VB
  • ポイント:
    • MySQLはODBCドライバをインストールして利用。
    • 接続文字列は環境に合わせて変更。

テンプレ4:データ更新(INSERT/UPDATE)

Sub Update_DB()
    Dim conn As Object
    Dim sql As String
    
    Set conn = CreateObject("ADODB.Connection")
    conn.ConnectionString = "Provider=SQLOLEDB;Data Source=サーバー名;Initial Catalog=DB名;User ID=ユーザー;Password=パスワード;"
    conn.Open
    
    ' INSERT文
    sql = "INSERT INTO Users (Name, Age) VALUES ('佐藤', 28)"
    conn.Execute sql
    
    ' UPDATE文
    sql = "UPDATE Users SET Age = 29 WHERE Name = '佐藤'"
    conn.Execute sql
    
    conn.Close
    MsgBox "データベースを更新しました!"
End Sub
VB
  • ポイント:
    • conn.Execute でINSERT/UPDATE/DELETEも可能。
    • 実務で「ExcelからDBに登録」する場面に便利。

例題で練習

'例1:SQL ServerからTOP10件を取得してシートに展開
'例2:Accessファイルからテーブルを読み込む
'例3:MySQLから商品一覧を取得
'例4:INSERT/UPDATEでデータを更新
VB

初心者向けポイント

  • ADO接続は「ConnectionString」が肝心 → DB種類ごとに書き方が違う。
  • SELECT文はRecordsetで受け取る → Excelに展開可能。
  • INSERT/UPDATE/DELETEはExecuteで実行 → 結果は返さない。
  • 終了処理を忘れないrs.Closeconn.Close
  • 実務では「ExcelをフロントにしてDBを操作」する場面が多い

👉 この「外部DB(ADO接続)テンプレ」を覚えておけば、Excel VBAで 外部データベースと連携し、データ取得や更新を行う処理 を簡単に作成できます。

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