Excel VBA 逆引き集 | DB⇄Excel同期

Excel VBA
スポンサーリンク

外部連携 × DB⇄Excel同期(ADO接続)

Excelを「フロントエンド」として使い、外部データベースと 双方向に同期(読み込み/書き込み) する方法を紹介します。
初心者向けに、コード例やテンプレートをかみ砕いて説明します。


基本の考え方

  • DB⇄Excel同期とは?
    • DB → Excel:SELECT文でデータを取得し、シートに展開
    • Excel → DB:INSERT/UPDATE文でExcelの入力をDBに反映
  • 流れ:
    1. ADOでDBに接続
    2. SELECTでデータを取得 → Excelに展開
    3. Excelの値をINSERT/UPDATEでDBに反映
    4. 必要に応じて定期的に同期

テンプレ1:DB → Excel(SELECT結果をシートに展開)

Sub Sync_DBtoExcel()
    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でデータ取得
    sql = "SELECT * FROM Customers"
    Set rs = conn.Execute(sql)
    
    ' シートに展開
    ws.Cells.Clear
    ws.Range("A1").CopyFromRecordset rs
    
    ' 終了処理
    rs.Close: conn.Close
    MsgBox "DBからExcelへ同期しました!"
End Sub
VB
  • ポイント:
    • CopyFromRecordset で一括展開。
    • Excelを「DBビューア」として利用可能。

テンプレ2:Excel → DB(INSERTで新規追加)

Sub Sync_ExcelToDB_Insert()
    Dim conn 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
    
    ' Excelの値をINSERT
    sql = "INSERT INTO Customers (Name, Age, Address) VALUES ('" & _
          ws.Range("A2").Value & "', " & ws.Range("B2").Value & ", '" & ws.Range("C2").Value & "')"
    
    conn.Execute sql
    conn.Close
    
    MsgBox "ExcelのデータをDBに追加しました!"
End Sub
VB
  • ポイント:
    • Excelのセル値を文字列連結でSQLに組み込む。
    • 実務で「Excel入力をDBに登録」する場面に便利。

テンプレ3:Excel → DB(UPDATEで既存更新)

Sub Sync_ExcelToDB_Update()
    Dim conn 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
    
    ' Excelの値で更新
    sql = "UPDATE Customers SET Age = " & ws.Range("B2").Value & _
          ", Address = '" & ws.Range("C2").Value & "' WHERE Name = '" & ws.Range("A2").Value & "'"
    
    conn.Execute sql
    conn.Close
    
    MsgBox "ExcelのデータでDBを更新しました!"
End Sub
VB
  • ポイント:
    • WHERE句で対象を絞る。
    • Excelの値を使って更新できる。

テンプレ4:DB⇄Excelの双方向同期イメージ

  1. DB → Excel
    • SELECTで最新データを取得し、シートに展開
  2. Excel → DB
    • ユーザーがExcelで編集
    • INSERT/UPDATEでDBに反映
'流れの例
Call Sync_DBtoExcel   ' DBから最新データを取得
' ユーザーがExcelで編集
Call Sync_ExcelToDB_Update   ' 編集内容をDBに反映
VB

例題で練習

'例1:DBから顧客一覧をExcelに展開
'例2:Excelの入力をINSERTしてDBに追加
'例3:Excelの編集内容をUPDATEしてDBに反映
'例4:DB⇄Excelの双方向同期を実現
VB

初心者向けポイント

  • SELECTはデータ取得、INSERT/UPDATEは反映 → 役割を明確に。
  • Excelを「入力フォーム」として使える → DBに直接登録可能。
  • WHERE句を忘れると全件更新になる → 実務で最重要注意点。
  • 終了処理を必ず行うconn.Close
  • 双方向同期は「取得→編集→反映」の流れ → ExcelとDBを橋渡しできる。

👉 この「外部連携 × DB⇄Excel同期テンプレ」を覚えておけば、Excel VBAで 外部データベースとExcelを双方向に同期し、業務データを効率的に管理する処理 を簡単に作成できます。

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