外部連携 × 外部DB(ADO接続)の基本
Excel VBAでは、ADO(ActiveX Data Objects) を使うことで外部データベース(SQL Server、Oracle、Access、MySQLなど)に接続してデータを取得・更新できます。
初心者向けに、コード例やテンプレートをかみ砕いて説明します。
基本の考え方
- ADOとは?
Microsoftが提供するデータアクセス技術。VBAから外部DBに接続してSQLを実行できる。 - 流れ:
- 接続文字列(ConnectionString)を指定してDBに接続
- SQL文を実行
- 結果をRecordsetで受け取り、Excelに展開
- 必要に応じて更新や削除も可能
テンプレ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で一括展開できる。
- Accessの場合は
テンプレ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.Close、conn.Close。 - 実務では「ExcelをフロントにしてDBを操作」する場面が多い。
👉 この「外部DB(ADO接続)テンプレ」を覚えておけば、Excel VBAで 外部データベースと連携し、データ取得や更新を行う処理 を簡単に作成できます。
