【VBA】テーブルのレコードをCSVファイルへ出力する【SQL Server】

VBAから
 ・テーブルのレコードをCSVファイルへ出力
できます!

テーブルのレコード
テーブルのレコード

出力するCSVファイルには
 ・列名(カラム名)も出力
されます!

出力するCSVファイル
出力するCSVファイル
PR

VBAコード

ここでは例として
 ・SQL Server上のDB「sampleDB」にあるテーブル「employee」のレコードを
 ・CSVファイルへ出力
します。

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 csvFile As String
    Dim sql As String
    Dim conStr As String
    Dim wb As Workbook
    Dim fso As Object
    
    '出力するCSVファイルを指定
    csvFile = "C:\Users\user\Desktop\sample.csv"
    '実行するSELECT文
    sql = "SELECT * FROM employee"
    
    '接続文字列の組み立て(Windows認証)
'    conStr = "Provider=" & PROVIDER & ";" & _
'              "Data Source=" & SERVER_NAME & ";" & _
'              "Initial Catalog=" & DB_NAME & ";" & _
'              "Integrated Security=SSPI;" & _
'              "DataTypeCompatibility=80;"
              
    '接続文字列の組み立て(SQL Server認証)
    conStr = "Provider=" & PROVIDER & ";" & _
              "Data Source=" & SERVER_NAME & ";" & _
              "Initial Catalog=" & DB_NAME & ";" & _
              "User ID=" & USER_NAME & ";" & _
              "Password=" & PASSWORD & ";" & _
              "DataTypeCompatibility=80;"
    
    '新規ブックを作成
    Set wb = Workbooks.Add
    
    '新規ブックへSELECT結果を設定
    With wb.Worksheets(1).QueryTables.Add(Connection:="OLEDB;" & conStr, _
                                          Destination:=Range("A1"), _
                                          sql:=sql)
        .Refresh BackgroundQuery:=False
        .Delete
    End With
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    '出力するCSVファイルが既に存在する場合は削除
    If fso.FileExists(csvFile) Then
        fso.deleteFile csvFile
    End If

    '新規ブックをCSVファイルとして出力
    wb.SaveAs Filename:=csvFile, FileFormat:=xlCSV, Local:=True
    '新規ブックを保存せずに閉じる
    wb.Close SaveChanges:=False
    
    '後片付け
    Set fso = Nothing
    
End Sub

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

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

PR

実行結果

テーブルのレコードをCSVファイルへ出力できました。

実行結果①
実行結果①
実行結果②
実行結果②
PR

参考

上記のVBAコードは以下の記事を参考にしました。


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