LoginSignup
9
15

More than 3 years have passed since last update.

Excel(VBA) + PostgreSQL

Last updated at Posted at 2019-07-29

初めに

この記事では, 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を選択する
スクリーンショット 2019-07-28 23.31.20.png

2.ODBC登録

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

スクリーンショット 2019-07-30 0.06.54.png

3.マクロ作成

 まず初めに, Visual Basicを開き, 「ツール>参照」から "Microsoft ActiveX Data 2.8 Library"にチェックマークをつける.
スクリーンショット 2019-07-30 0.34.59.png
 それでは, 実際にマクロ【CnxTest】からPostgreSQLに接続して, 以下のテーブルについてSQLを発行してデータを取得してみる.

テーブル名: Employee

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

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

【マクロ実行前】
スクリーンショット 2019-07-30 1.28.42.png
【マクロ実行後】
スクリーンショット 2019-07-30 1.28.24.png

実行コード

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の出力位置に依存している.

参照

9
15
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
15