【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]

いいなと思ったら応援しよう!