初めに
この記事では, 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 | 太郎 | 人事部 |
実行結果は, 以下のようになる.
実行コード
```VB:CnxTest Sub CnxTest() Dim cnn As ADODB.Connection Dim recSet As ADODB.Recordset Dim sql As String, i As Integer, c As IntegerSet 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の出力位置に依存している.
<h2>参照</h2>
https://qiita.com/syict001/items/9ec043f711636dc0105b