【ExcelVBA】PostgreSQLデータベースに接続する方法


この記事はプロモーションを含みます。

ExcelVBA

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クエリと実行結果出力先シートを引数に関数を呼び出すだけです。是非ともご活用ください。

コメント

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