【VBA】SELECT文を実行する【SQL Server】

VBAから
 ・SQL ServerへSELECT文を実行
できます!

PR

前提

・「Microsoft OLE DB Driver for SQL Server」がインストールされていること。

「Microsoft OLE DB Driver for SQL Server」がインストール有無は、[Windowsの設定]-[アプリ]で確認できます。

[Windowsの設定]-[アプリ]
[Windowsの設定]-[アプリ]
PR

VBAコード

ここでは例として、
 ・テーブル「employee」へSELECT文を実行して
 ・取得したデータをシートへ張り付け
します。
※エラー処理もします。

テーブル「employee」のデータ
テーブル「employee」のデータ
Option Explicit

Sub sample()

    'プロバイダ
    Const PROVIDER As String = "MSOLEDBSQL"
    'サーバー名
    Const SERVER_NAME As String = "localhost\SQLEXPRESS"
    'DB名
    Const DB_NAME As String = "sampleDB"
    'ユーザー名
    Const USER_NAME As String = "XXXXX"
    'パスワード
    Const PASSWORD As String = "XXXXX"
    
    Dim ws As Worksheet
    Dim sql As String
    Dim conStr As String
    Dim con As Object
    Dim rs As Object
    
    'シート
    Set ws = Worksheets("sample")
    'SELECT文
    sql = "SELECT id,name,sex,section FROM employee"
    '接続文字列の組み立て(SQL Server認証)
    conStr = "Provider=" & PROVIDER & ";" & _
              "Data Source=" & SERVER_NAME & ";" & _
              "Initial Catalog=" & DB_NAME & ";" & _
              "User ID=" & USER_NAME & ";" & _
              "Password=" & PASSWORD & ";"
    
    On Error GoTo Err
    
    'DB接続
    Set con = CreateObject("ADODB.Connection")
    con.Open conStr
    'SELECT文を発行
    Set rs = con.Execute(sql)
    '結果(取得したレコード)をシートに貼付け
    ws.Range("B2").CopyFromRecordset rs
    '接続を閉じる
    rs.Close
    con.Close
    Set rs = Nothing
    Set con = Nothing

    Exit Sub
    
Err:
    MsgBox ("エラーが発生しました。" & vbCrLf & vbCrLf & _
            Err.Description & vbCrLf), vbCritical
    
    If Not rs Is Nothing Then
        rs.Close
    End If
    'DB接続していたら閉じる
    If con.State = 1 Then
        con.Close
    End If
    
    Set rs = Nothing
    Set con = Nothing

End Sub

以下を設定します(6~14行目)。
※必要に応じて修正してください。

・プロバイダ
・サーバー名
・DB名
・ユーザー名
・パスワード
※上記では「ユーザー名」と「パスワード」は仮で「XXXXX」としています。適切な値を設定してください。

「Connectionオブジェクト」の「Open」メソッドにより、DBへ接続します(37行目)。

「Connectionオブジェクト」の「Execute」メソッドにより、SELECT文を発行します(39行目)。
※「Recordsetオブジェクト」を取得します。

「Rangeオブジェクト」の「CopyFromRecordset」メソッドにより、取得したデータをシートへ張り付けます(41行目)。

PR

実行結果

SQL ServerへSELECT文を実行できました。

実行結果
実行結果
PR

参考①

SQL ServerへINSERT文の実行もできます。

詳細は以下の記事をご確認ください。

PR

参考②

上記で使用した以下の詳細は、公式サイトをご確認ください。

●「Connectionオブジェクト」の「Open」メソッド


●「Connectionオブジェクト」の「Execute」メソッド


●「Rangeオブジェクト」の「CopyFromRecordset」メソッド