ExcelのVBAでPostgreSQLのデータベースに接続する方法を解説します。
ODBCドライバのインストール
ExcelVBAでPostgreSQLデータベースに接続するには、ODBCドライバが必要です。
以下の記事を参考に「インストーラーのダウンロード」、「インストール」を行ってください。
(「接続先の設定と接続確認」は必須ではないですが、行っておくことで、トラブル時にODBCドライバの設定が原因かExcelVBAが原因か問題の切り分けがしやすくなると思います。)
ExcelVBAでの作業
ここでは、ExcelVBAの参照設定と実際にデータベースに接続してみます。
参照設定
ExcelVBAの画面のメニューバーより、「ツール」>「参照設定」をクリックします。
参照設定の画面で「Microsoft ActiveX Data Objects 2.8 Library」にチェックを入れて「OK」をクリックします。
以上で、参照設定は完了です。
ソースコード
ExcelVBAのソースコードになります。
ソースコードは「ThisWorkbook」に記述します。
今回は AnsibleAWX のデータベースに接続してみました。
各定数「Const DB*の部分」に接続先の情報を定義します。
変数[sql]に実行するSQLクエリを定義します。
データベースへの接続処理は「ConnectDB」関数にまとめています。
引数として、下記が設定可能です。
・引数①:実行するSQLクエリ
・引数②:実行結果を出力するシート
Option Explicit
Const DB_HOST As String = "192.168.56.106"
Const DB_PORT As String = "5432"
Const DB_NAME As String = "awx"
Const DB_USER As String = "awx"
Const DB_PASS As String = "awx"
Const SHT_RESULT As String = "Sheet1"
Sub main()
' SQLクエリ
Dim sql As String
sql = "SELECT * FROM public.main_project"
Call ConnectDB(sql, SHT_RESULT)
End Sub
Private Function ConnectDB(ByVal sql As String, ByVal sheetNm As String)
' DBコネクション開設
Dim CN As New ADODB.Connection
CN.Open "Driver=PostgreSQL Unicode;UID=awx;Port=" & DB_PORT & ";Server=" & DB_HOST & ";Database=" & DB_NAME & ";PWD=" & DB_PASS
' SQL実行
Dim RS As New ADODB.Recordset
RS.Open sql, CN, adOpenKeyset, adLockOptimistic, adCmdText
Dim i As Long, j As Long
' 実行結果出力
With Worksheets(sheetNm)
.Cells.Clear
RS.MoveFirst
i = 2
Do Until RS.EOF
For j = 0 To RS.Fields.Count - 1
If (i = 2) Then
.Cells(i - 1, j + 1) = RS(j).Name
.Cells(i, j + 1) = RS(j).Value
Else
.Cells(i, j + 1) = RS(j).Value
End If
Next
RS.MoveNext
i = i + 1
Loop
End With
' 各種オブジェクトのクローズ
RS.Close
CN.Close
Set CN = Nothing
End Function
実行結果
サンプルのソースコードを実行した結果になります。
データベースに接続し、シート「Sheet1」に実行結果が出力されていることが分かります。
記事は以上です。簡単に取得出来ましたね。
今回ご紹介した関数を標準モジュールなどに組み込んでおけば、SQLクエリと実行結果出力先シートを引数に関数を呼び出すだけです。是非ともご活用ください。
コメント