Excel VBA 逆引き集 | DBマスタ取り込み

Excel VBA
スポンサーリンク

外部連携 × 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 で一括展開。

テンプレ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
    • 必要な列だけ指定すると効率的。

テンプレ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で編集・分析・同期する処理 を簡単に作成できます。

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