Excel(VBA) + PostgreSQL


初めに

この記事では, VBAからPostgreSQLへの接続方法を説明し, 実際にマクロから
シンプルなSQL実行までデモンストレートします.

仕事の業務効率化で使用した際の備忘録的なものです.

実行環境:
OS : Windows10 64bit
DB : PostgreSQL 11.3
Excel2016 32-bit

※PostgreSQLをインストールしていない方は, 以下からダウンロードできます.
https://www.enterprisedb.com/downloads/postgres-postgresql-downloads

1. psqlODBCドライバのインストール

初めに, 自分のPCのExcelのバージョン(bit)を確認する. その後, 以下のサイトへ移動し, 適切なpsqlodbcドライバをインストールする.

使用しているExcelが32bitの場合, psqlodbc_11_01_0000-x86.zipを選択してpsqlodbc_x86.msiを実行する.
※ 64bitの場合は, psqlodbc_11_01_0000-x64.zipを選択する

2.ODBC登録

Windowsボタン -> ODBC Data Source Administrator (32-bit) を実行し, SystemDSNの[add]ボタンからPostgreSQL35Wドライバを選択し, データソースを作成する.

3.マクロ作成

 まず初めに, Visual Basicを開き, 「ツール>参照」から "Microsoft ActiveX Data 2.8 Library"にチェックマークをつける.

 それでは, 実際にマクロ【CnxTest】からPostgreSQLに接続して, 以下のテーブルについてSQLを発行してデータを取得してみる.

テーブル名: Employee

ID 名前(name) 部署名(dep_name)
1 ロバート 開発部
2 太郎 人事部

実行結果は, 以下のようになる.

【マクロ実行前】

【マクロ実行後】

実行コード

CnxTest
Sub CnxTest()
    Dim cnn As ADODB.Connection
    Dim recSet As ADODB.Recordset
    Dim sql As String, i As Integer, c As Integer

    Set cnn = New ADODB.Connection
    '接続情報を定義: ここでは, データソース名のみ
    cnn.ConnectionString = "DSN:PostgresSQL35W;"
    Set recSet = New ADODB.Recordset
    sql = "SELECT * FROM Employee"

    cnn.Open
        recSet.Source = sql
        recSet.ActiveConnection = cnn  
        recSet.Open 
            i = 1
            'sql実行結果を一レコードずつフェッチする. 
            Do Until recSet.EOF
               For c = 0 To recSet.Fields.Count - 1
                   Cells(c+2,c+2) = recSet(c).Value
               Next c
               i = i + 1
               recSet.MoveNext
             Loop
         recSet.Close
     cnn.Close

     Set recSet = Nothing
     Set cnn = Nothing

End Sub

※ ソースコード内のマジックナンバー2は, Excelの出力位置に依存している.

参照