Excel VBA 逆引き集 | SELECT結果をシートへ

Excel VBA
スポンサーリンク

外部連携 × SELECT結果をシートへ展開

Excel VBAから外部データベースに接続して SELECT文を実行し、その結果をシートに展開する 方法を紹介します。
初心者向けに、コード例やテンプレートをかみ砕いて説明します。


基本の考え方

  • SELECT文とは?
    データベースから必要なデータを取り出すSQL文。
  • ADO接続の流れ:
    1. Connection オブジェクトでDBに接続
    2. Execute メソッドでSELECT文を実行
    3. 結果を Recordset に格納
    4. Excelシートに展開

テンプレ1:AccessデータベースからSELECT結果をシートへ

Sub SQL_Select_ToSheet()
    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")
    
    ' 接続文字列(例:Accessファイル)
    conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                            "Data Source=C:\temp\sample.accdb;"
    conn.Open
    
    ' SQL文
    sql = "SELECT * FROM Customers"
    
    ' SQL実行 → Recordsetに結果を格納
    Set rs = conn.Execute(sql)
    
    ' シートに展開
    ws.Cells.Clear
    ws.Range("A1").CopyFromRecordset rs
    
    ' 終了処理
    rs.Close
    conn.Close
    Set rs = Nothing
    Set conn = Nothing
    
    MsgBox "SELECT結果をシートに展開しました!"
End Sub
VB
  • ポイント:
    • CopyFromRecordset を使うと結果を一括でシートに書き込める。
    • Accessファイルに接続する場合は Provider=Microsoft.ACE.OLEDB.12.0

テンプレ2:SQL ServerからSELECT結果をシートへ

Sub SQLServer_Select_ToSheet()
    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=SQLOLEDB;" & _
                            "Data Source=サーバー名;" & _
                            "Initial Catalog=データベース名;" & _
                            "User ID=ユーザー名;" & _
                            "Password=パスワード;"
    conn.Open
    
    sql = "SELECT TOP 10 * FROM Users"
    Set rs = conn.Execute(sql)
    
    ws.Cells.Clear
    ws.Range("A1").CopyFromRecordset rs
    
    rs.Close
    conn.Close
    MsgBox "SQL Serverからデータを取得しました!"
End Sub
VB
  • ポイント:
    • SQL Serverは Provider=SQLOLEDB を利用。
    • TOP 10 で上位10件だけ取得。

テンプレ3:結果をヘッダー付きで展開(フィールド名も表示)

Sub SQL_Select_WithHeaders()
    Dim conn As Object, rs As Object
    Dim sql As String
    Dim ws As Worksheet: Set ws = Worksheets("Data")
    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 "SELECT結果をヘッダー付きで展開しました!"
End Sub
VB
  • ポイント:
    • rs.Fields(i).Name で列名を取得。
    • ヘッダー行を追加すると見やすい。

例題で練習

'例1:AccessからSELECT結果をシートに展開
'例2:SQL ServerからTOP10件を取得
'例3:ヘッダー付きで結果を展開
VB

初心者向けポイント

  • SELECT文はデータ取得専用Recordset に結果が入る。
  • CopyFromRecordsetで一括展開 → 簡単にシートに書き込める。
  • フィールド名を出力すると見やすい → ヘッダー付きが実務向け。
  • 終了処理を忘れないrs.Closeconn.Close
  • Excelを「DBビューア」として使える → データ確認や分析に便利。

👉 この「外部連携 × SELECT結果をシートへ展開テンプレ」を覚えておけば、Excel VBAで 外部データベースから取得したデータをExcelに展開して分析やレポートに活用する処理 を簡単に作成できます。

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