VBAから
・テーブルのレコードをCSVファイルへ出力
できます!
出力するCSVファイルには
・列名(カラム名)も出力
されます!
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
実行結果
テーブルのレコードをCSVファイルへ出力できました。
参考
上記のVBAコードは以下の記事を参考にしました。