VBAでサーバーに接続してSQLを実行するには、ADO(ActiveX Data Objects)を使ってデータベースへ接続し、SQLを発行します。SQL Server や MySQL、Oracle などに接続できますが、ここでは代表的な SQL Server を例にして説明します。

✅ 前提:参照設定を追加
VBAエディタで以下の設定をしてください:
- 「ツール」>「参照設定」
- 「Microsoft ActiveX Data Objects x.x Library」にチェック(例:6.1)
✅ 基本構文:SQL Server に接続して SELECT を実行する
Sub SQLServerに接続してSELECT実行()
Dim conn As Object
Dim rs As Object
Dim sql As String
' 接続情報を設定
Set conn = CreateObject("ADODB.Connection")
conn.Open "Provider=SQLOLEDB;Data Source=サーバー名;Initial Catalog=データベース名;" & _
"User ID=ユーザー名;Password=パスワード;"
' 実行するSQL
sql = "SELECT TOP 10 * FROM テーブル名"
' レコードセット取得
Set rs = conn.Execute(sql)
' 結果をExcelシートに出力
Dim i As Long, j As Long
i = 1
Do Until rs.EOF
For j = 1 To rs.Fields.Count
Cells(i, j).Value = rs.Fields(j - 1).Value
Next j
i = i + 1
rs.MoveNext
Loop
' 後始末
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing
MsgBox "完了!"
End Sub
✅ 接続文字列(Connection String)の例
データベース | Connection String(例) |
---|---|
SQL Server(認証あり) | Provider=SQLOLEDB;Data Source=サーバー名;Initial Catalog=DB名;User ID=ユーザー;Password=パス; |
SQL Server(Windows認証) | Provider=SQLOLEDB;Data Source=サーバー名;Initial Catalog=DB名;Integrated Security=SSPI; |
MySQL(ODBC経由) | Driver={MySQL ODBC 8.0 Unicode Driver};Server=ホスト名;Database=DB名;User=ユーザー;Password=パス;Option=3; |
✅ INSERT / UPDATE / DELETE などのSQLを実行する
Sub SQLServerに接続してINSERT()
Dim conn As Object
Set conn = CreateObject("ADODB.Connection")
conn.Open "Provider=SQLOLEDB;Data Source=サーバー名;Initial Catalog=データベース名;" & _
"User ID=ユーザー名;Password=パスワード;"
Dim sql As String
sql = "INSERT INTO テーブル名 (列1, 列2) VALUES ('値1', '値2')"
conn.Execute sql
conn.Close
Set conn = Nothing
MsgBox "INSERT 完了!"
End Sub
✅ エラーハンドリング付き(推奨)
On Error GoTo ErrorHandler
' 処理...
Exit Sub
ErrorHandler:
MsgBox "エラー発生: " & Err.Description
If Not rs Is Nothing Then If rs.State = 1 Then rs.Close
If Not conn Is Nothing Then If conn.State = 1 Then conn.Close
✅ よくある接続トラブル
原因 | 対処方法 |
---|---|
サーバー名が不正 | SSMSなどで接続情報を確認 |
ポートがブロックされている | ファイアウォールやVPNを確認 |
ドライバが未インストール | SQL Server Native Client や ODBC ドライバをインストール |
🎯 まとめ
- ADOを使えば、VBAからSQL Serverなどに接続してSQLを実行可能
- SELECTの結果はシートへ出力も可能
- INSERT/UPDATE/DELETEにも対応