ExcelのVBAでODBC接続を使ってポスグレのDB操作をする方法

今回はVBAでポスグレ(PostgreSQL)のDB操作をする方法です。

この記事ではODBC接続を使った方法をご紹介します。

[目次]

ODBC接続の準備

まずはODBC接続の準備からです。

クライアント端末にポスグレのODBCドライバーをインストールするところからになります。

インストーラをダウンロード

まずポスグレのサイトにアクセスします。

➡( http://www.postgresql.org/ )

左上か中央のDownloadをクリックします。

左ペインの「File Browser」をクリックします。

「odbc」をクリックします。

「versions」をクリックします。

「msi」をクリックします。

ここでmsiの一覧が表示されます。

一番したが最新のmsiになっているので、そこで各自の環境に合ったmsiをダウンロードします。

OSのbit数を調べる方法はこちら⇩

64ビット環境の場合は、「x64」が付いたmsiをダウンロードします。

インストール

ダウンロードしたインストーラをダブルクリックで起動します。

「Next」をクリック

「I accept the terms in the License Agreement」にチェックを入れて「Next」をクリック

そのまま「Next」をクリック

「Install」をクリック

しばらく待ちます。

これで完了です。「Finish」をクリック

接続テスト

コントロールパネルを開きます。

「システムとセキュリティ」をクリック

「管理ツール」をクリック

「ODBCデータソース」をクリック

こんな画面が開きます。

「システムDNS」タブで追加をクリック

「PostgreSQL Unicode(x64)」を選択し、完了をクリック

以下のような設定画面が開くので、サーバー名、ユーザー名、パスワードを入力して「テスト」をクリック

「Connection successful」が表示されたらOKです!

VBAからポスグレDBを操作する方法

ExcelのVBAからポスグレのDB操作をする方法です。

まずExcel側での準備として参照追加が必要なので、その設定をします。

参照設定追加

VBAのウィンドウでメニューバーの「ツール」から参照設定をクリック

参照設定の画面が開くので、

「Microsoft ActiveX Data Objects 2.8 Library」にチェックを入れてOKをクリック。これで準備は完了です。

※環境によってこのライブラリのバージョンが違う場合があります。

VBAの記述方法

以下、サンプルスクリプトになります。

Sub TestVBA()
Const SV = "localhost"
Const DB = "【データベース名】"
Const PW = "【パスワード】"
Dim CNN As Object
Dim RS As Variant
Set CNN = CreateObject("ADODB.Connection")
CNN.Open "Provider=MSDASQL;Driver=PostgreSQL Unicode;UID=postgres;Port=5432" & ";Server=" & SV & ";Database=" & DB & ";PWD=" & PW

'データ取得
Dim CN As ADODB.Connection
Dim SQL As String

'接続
'レコードセットを取得
Set RS = New ADODB.Recordset
SQL = "SELECT * from person"
RS.Open SQL, CNN, adOpenKeyset, adLockOptimistic, adCmdText

'テーブルのヘッダーとデータを出力する。
With Worksheets("Sheet1")
.Cells.Clear
RS.MoveFirst
i = 1
.Cells.Clear
Do Until RS.EOF
For j = 0 To RS.Fields.Count - 1
If i = 1 Then .Cells(i, j + 1) = RS(j).Name
If j <> 8 Then
.Cells(i + 1, j + 1) = RS(j).Value
End If
Next j
RS.MoveNext
i = i + 1
Loop
.Columns("A:H").AutoFit
End With
RS.Close

' レコードセット、データベースを閉じる
CNN.Close
Set CNN = Nothing
End Sub

ここではpersonというテーブルから全行全列を取得してきて、Sheet1に出力しています。

参考にしたサイト➡( https://qiita.com/syict001/items/9ec043f711636dc0105b )