【VBAマクロ】VBAでSQL文を実行し、Excel表データを操作する方法(ADO使用)
(1)今回使用するExcelシート構成
①SQLで操作する表データ(商品売上表シート)
※SQL文でデータ操作する対象元の表です

②SQL文を入力するシート(SQLシート)
※実行したいSQL文をセルB1に記入する仕様です

③SQLでの出力先シート(出力シート)
※SQL文で操作したデータをここへ出力します。

(2)VBAコード
Sub SQL実行()
'■変数設定
Dim filePath As String: filePath = ThisWorkbook.FullName '接続先のファイルパス(自分自身のファイルを設定)
Dim SQL As String: SQL = Worksheets("SQL").Range("B1").Value 'SQL文のコードを記入するセル番地
Dim row As Long: row = 1 '出力先の開始セルの行番号
Dim col As Long: col = 1 '出力先の開始セルの列番号
'■オブジェクトの宣言・設定
Dim cn As Object
Dim rs As Object
Set cn = CreateObject("ADODB.Connection") '接続オブジェクトの作成
Set rs = CreateObject("ADODB.Recordset") 'レコードセットオブジェクトの作成
'■ADO接続
cn.Provider = "Microsoft.ACE.OLEDB.12.0" 'Excelのバージョンによって異なる。
cn.Properties("Extended Properties") = "Excel 12.0 Macro" '読込むファイルが.xlsmの場合は「Macro」。.xlsの場合は、「xml」。
cn.Open filePath 'データベースに接続
rs.Open SQL, cn 'SQL文を実行し、データ取得
'■前回貼り付けたデータの削除(出力シート)
Worksheets("出力").Cells(row, col).CurrentRegion.Clear
'■出力シートに値を出力
'
'1行目にタイトル出力
For i = 1 To rs.Fields.Count
Worksheets("出力").Cells(row, i) = rs.Fields(i - 1).Name
Next
'データの貼り付け
Worksheets("出力").Cells(row + 1, col).CopyFromRecordset rs
rs.Close
'■終了メッセージ
MsgBox "処理が完了しました"
End Sub
(3)VBA実行後
・出力シートに値が出力される
※今回のSQLの例は、下記となります。
(表そのままのデータを取り出しただけ)
SELECT * FROM [商品売上表$A1:E]
