外部連携 × DBマスタ取り込み(ADO接続)
業務でよくあるのが「外部データベースにあるマスタ情報をExcelに取り込みたい」というケースです。
例えば「顧客マスタ」「商品マスタ」「社員マスタ」などをExcelに展開して分析や帳票作成に使います。
初心者向けに、コード例やテンプレートをかみ砕いて説明します。
基本の考え方
- DBマスタ取り込みとは?
外部DBにあるテーブル(マスタ)をSELECT文で読み込み、Excelシートに展開する処理。 - 用途:
- 顧客マスタをExcelに取り込み、売上データと突合
- 商品マスタをExcelに展開して在庫管理に利用
- 社員マスタをExcelに展開して人事資料に活用
テンプレ1:Accessの顧客マスタを取り込み
Sub Import_Access_Master()
Dim conn As Object, rs As Object
Dim sql As String
Dim ws As Worksheet: Set ws = Worksheets("Master")
' 接続
Set conn = CreateObject("ADODB.Connection")
conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\temp\sample.accdb;"
conn.Open
' SQLで顧客マスタを取得
sql = "SELECT * FROM Customers"
Set rs = conn.Execute(sql)
' シートに展開
ws.Cells.Clear
ws.Range("A1").CopyFromRecordset rs
' 終了処理
rs.Close: conn.Close
MsgBox "顧客マスタをExcelに取り込みました!"
End Sub
VB- ポイント:
- Accessの場合は
Provider=Microsoft.ACE.OLEDB.12.0。 CopyFromRecordsetで一括展開。
- Accessの場合は
テンプレ2:SQL Serverの商品マスタを取り込み
Sub Import_SQLServer_Master()
Dim conn As Object, rs As Object
Dim sql As String
Dim ws As Worksheet: Set ws = Worksheets("Master")
Set conn = CreateObject("ADODB.Connection")
conn.ConnectionString = "Provider=SQLOLEDB;" & _
"Data Source=サーバー名;" & _
"Initial Catalog=データベース名;" & _
"User ID=ユーザー名;" & _
"Password=パスワード;"
conn.Open
sql = "SELECT ProductID, ProductName, Price FROM Products"
Set rs = conn.Execute(sql)
ws.Cells.Clear
ws.Range("A1").CopyFromRecordset rs
rs.Close: conn.Close
MsgBox "商品マスタをExcelに取り込みました!"
End Sub
VB- ポイント:
- SQL Serverは
Provider=SQLOLEDB。 - 必要な列だけ指定すると効率的。
- SQL Serverは
テンプレ3:ヘッダー付きで展開(見やすく)
Sub Import_Master_WithHeaders()
Dim conn As Object, rs As Object
Dim sql As String
Dim ws As Worksheet: Set ws = Worksheets("Master")
Dim i As Long, rowCount As Long
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
' ヘッダー行
For i = 0 To rs.Fields.Count - 1
ws.Cells(1, i + 1).Value = rs.Fields(i).Name
Next i
' データ行
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
MsgBox "マスタをヘッダー付きで取り込みました!"
End Sub
VB- ポイント:
rs.Fields(i).Nameで列名を取得。- ヘッダー付きで展開すると見やすい。
テンプレ4:Excelの更新内容をDBに反映(同期)
Sub Sync_Master_Update()
Dim conn As Object
Dim sql As String
Dim ws As Worksheet: Set ws = Worksheets("Master")
Set conn = CreateObject("ADODB.Connection")
conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\temp\sample.accdb;"
conn.Open
' Excelの値で更新(例:2行目の顧客)
sql = "UPDATE Customers SET Address = '" & ws.Range("C2").Value & _
"' WHERE Name = '" & ws.Range("A2").Value & "'"
conn.Execute sql
conn.Close
MsgBox "Excelの編集内容をDBに反映しました!"
End Sub
VB- ポイント:
- マスタ取り込み後にExcelで編集 → UPDATEで反映。
- 双方向同期が可能。
例題で練習
'例1:Accessから顧客マスタを取り込み
'例2:SQL Serverから商品マスタを取り込み
'例3:ヘッダー付きで展開
'例4:Excel編集内容をDBに反映
VB初心者向けポイント
- SELECTでマスタを取得 → Excelに展開
- CopyFromRecordsetで一括展開可能
- ヘッダー付き展開で見やすくなる
- Excel編集内容をUPDATEでDBに反映できる
- Excelを「マスタ管理のフロント」として活用できる
👉 この「外部連携 × DBマスタ取り込みテンプレ」を覚えておけば、Excel VBAで 外部データベースのマスタを取り込み、Excelで編集・分析・同期する処理 を簡単に作成できます。
