外部連携 × SELECT結果をシートへ展開
Excel VBAから外部データベースに接続して SELECT文を実行し、その結果をシートに展開する 方法を紹介します。
初心者向けに、コード例やテンプレートをかみ砕いて説明します。
基本の考え方
- SELECT文とは?
データベースから必要なデータを取り出すSQL文。 - ADO接続の流れ:
ConnectionオブジェクトでDBに接続ExecuteメソッドでSELECT文を実行- 結果を
Recordsetに格納 - 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件だけ取得。
- SQL Serverは
テンプレ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.Close、conn.Close。 - Excelを「DBビューア」として使える → データ確認や分析に便利。
👉 この「外部連携 × SELECT結果をシートへ展開テンプレ」を覚えておけば、Excel VBAで 外部データベースから取得したデータをExcelに展開して分析やレポートに活用する処理 を簡単に作成できます。
