前回は、Excel VBAでOracleに接続し、指定したSELECT文の実行結果を1シートにまとめて出力してみたが、今回はMySQL, PostgreSQL, SQL Serverそれぞれに接続し同じように結果を出力してみたので、そのサンプルプログラムを共有する。
前提条件
下記記事のサンプルプログラムの作成が完了していること。
また、下記記事に記載されている、MySQLとPostgreSQLでのユーザー作成が完了していること。
さらに、下記記事の「前提条件」の内容が完了していること。
やってみたこと
Oracleの場合のサンプルプログラム
Oracleの場合のサンプルプログラムは、以下の前提条件の記事を参照のこと。
MySQLの場合のサンプルプログラム
MySQLの場合のサンプルプログラムは、Oracleの場合のソースコードのうち、DB接続を行うconnectDB関数と、結果出力するシート名に関する部分を変更している。connectDB関数の内容は、以下の通り。
'-----------------------------------------------------------
' 機能: DB接続を行う
' 引数: なし
' 返り値: DB接続コネクション
'-----------------------------------------------------------
Function connectDB() As ADODB.Connection
'変数定義
Dim sServer As String
Dim sDatabase As String
Dim sUser As String
Dim sPass As String
Dim ADOConnection As ADODB.Connection
'DB接続情報
sServer = Worksheets("実行情報").Cells(5, 3).Value 'データベースサーバー名
sDatabase = Worksheets("実行情報").Cells(6, 3).Value 'データベース名
sUser = Worksheets("実行情報").Cells(7, 3).Value 'ユーザーID
sPass = Worksheets("実行情報").Cells(8, 3).Value 'パスワード
'DB接続
On Error GoTo ErrOpenDb
Set ADOConnection = New ADODB.Connection
ADOConnection.ConnectionString = "Driver={MySQL ODBC 8.0 Unicode Driver}" _
& ";Server=" & sServer _
& ";Database=" & sDatabase _
& ";User=" & sUser _
& ";Password=" & sPass _
& ";Port=3306" _
& ";STMT=SET NAMES sjis"
ADOConnection.Open
Set connectDB = ADOConnection
Exit Function
ErrOpenDb:
'エラー時は、エラーメッセージを表示
MsgBox "エラーが発生しました" _
& vbCrLf & vbCrLf & Err.Description
Set connectDB = Nothing
End Functionその他、実際に作成したVBAファイルの内容は、以下のサイトの「DbDump(MySQL).xlsm」を参照のこと。
https://github.com/purin-it/vba/tree/master/excel-vba-db-one-sheet
また、MySQLのuser01データベースの、user_dataテーブル、m_sexテーブルに、以下のデータを作成しておく。


さらに、MySQLの場合の実行結果は、以下の通り。
1) サンプルプログラム「DbDump(MySQL).xlsm」を開き、下記のように値を入力し「取得」ボタンを押下する。

2) 以下のように確認ダイアログが表示されるので、「はい」ボタンを押下する。なお、「いいえ」ボタンを押下した場合は、何もせず処理を終了する。

3) 取得が完了すると完了メッセージが表示されるため、「OK」ボタンを押下する。

4) 「DBダンプ(MySQL)」シートを確認すると、以下のように、Select文の実行結果が出力されることが確認できる。なお、NULL値は「(NULL)」と表示されることが確認できる。

PostgreSQLの場合のサンプルプログラム
PostgreSQLの場合のサンプルプログラムも、Oracleの場合のソースコードのうち、DB接続を行うconnectDB関数と、結果出力するシート名に関する部分を変更している。connectDB関数の内容は、以下の通り。
'-----------------------------------------------------------
' 機能: DB接続を行う
' 引数: なし
' 返り値: DB接続コネクション
'-----------------------------------------------------------
Function connectDB() As ADODB.Connection
'変数定義
Dim sServer As String
Dim sDatabase As String
Dim sUser As String
Dim sPass As String
Dim ADOConnection As ADODB.Connection
'DB接続情報
sServer = Worksheets("実行情報").Cells(5, 3).Value 'データベースサーバー名
sDatabase = Worksheets("実行情報").Cells(6, 3).Value 'データベース名
sUser = Worksheets("実行情報").Cells(7, 3).Value 'ユーザーID
sPass = Worksheets("実行情報").Cells(8, 3).Value 'パスワード
'DB接続
On Error GoTo ErrOpenDb
Set ADOConnection = New ADODB.Connection
ADOConnection.ConnectionString = "Provider=MSDASQL;Driver=PostgreSQL Unicode(x64)" _
& ";Server=" & sServer _
& ";Database=" & sDatabase _
& ";UID=" & sUser _
& ";PWD=" & sPass _
& ";Port=5432"
ADOConnection.Open
Set connectDB = ADOConnection
Exit Function
ErrOpenDb:
'エラー時は、エラーメッセージを表示
MsgBox "エラーが発生しました" _
& vbCrLf & vbCrLf & Err.Description
Set connectDB = Nothing
End Functionその他、実際に作成したVBAファイルの内容は、以下のサイトの「DbDump(PostgreSQL).xlsm」を参照のこと。
https://github.com/purin-it/vba/tree/master/excel-vba-db-one-sheet
また、PostgreSQLのODBCドライバをインストールする必要がある。その手順は、以下のサイトを参照のこと。
https://www.projectgroup.info/documents/PostgreSQL/POS_000008.html
さらに、PostgreSQLのUSER01データベースの、user_dataテーブル、m_sexテーブルに、以下のデータを作成しておく。


また、PostgreSQLの場合の実行結果は、以下の通り。
1) サンプルプログラム「DbDump(PostgreSQL).xlsm」を開き、下記のように値を入力し「取得」ボタンを押下する。

2) 以下のように確認ダイアログが表示されるので、「はい」ボタンを押下する。なお、「いいえ」ボタンを押下した場合は、何もせず処理を終了する。

3) 取得が完了すると完了メッセージが表示されるため、「OK」ボタンを押下する。

4) 「DBダンプ(PostgreSQL)」シートを確認すると、以下のように、Select文の実行結果が出力されることが確認できる。なお、NULL値は「(NULL)」と表示されることが確認できる。

SQL Serverの場合のサンプルプログラム
SQL Serverの場合のサンプルプログラムも、Oracleの場合のソースコードのうち、DB接続を行うconnectDB関数と、結果出力するシート名に関する部分を変更している。connectDB関数の内容は、以下の通り。
'-----------------------------------------------------------
' 機能: DB接続を行う
' 引数: なし
' 返り値: DB接続コネクション
'-----------------------------------------------------------
Function connectDB() As ADODB.Connection
'変数定義
Dim sServer As String
Dim sDatabase As String
Dim sUser As String
Dim sPass As String
Dim ADOConnection As ADODB.Connection
'DB接続情報
sServer = Worksheets("実行情報").Cells(5, 3).Value 'データベースサーバー名
sDatabase = Worksheets("実行情報").Cells(6, 3).Value 'データベース名
sUser = Worksheets("実行情報").Cells(7, 3).Value 'ユーザーID
sPass = Worksheets("実行情報").Cells(8, 3).Value 'パスワード
'DB接続
On Error GoTo ErrOpenDb
Set ADOConnection = New ADODB.Connection
ADOConnection.ConnectionString = "Provider=SQLOLEDB" _
& ";Data Source=" & sServer _
& ";Initial Catalog=" & sDatabase _
& ";UID=" & sUser _
& ";PWD=" & sPass
ADOConnection.Open
Set connectDB = ADOConnection
Exit Function
ErrOpenDb:
'エラー時は、エラーメッセージを表示
MsgBox "エラーが発生しました" _
& vbCrLf & vbCrLf & Err.Description
Set connectDB = Nothing
End Functionその他、実際に作成したVBAファイルの内容は、以下のサイトの「DbDump(SQLServer).xlsm」を参照のこと。
https://github.com/purin-it/vba/tree/master/excel-vba-db-one-sheet
また、SQL Serverのmasterデータベースの、user_dataテーブル、m_sexテーブルに、以下のデータを作成しておく。


さらに、SQL Serverの場合の実行結果は、以下の通り。
1) サンプルプログラム「DbDump(SQLServer).xlsm」を開き、下記のように値を入力し「取得」ボタンを押下する。

2) 以下のように確認ダイアログが表示されるので、「はい」ボタンを押下する。なお、「いいえ」ボタンを押下した場合は、何もせず処理を終了する。

3) 取得が完了すると完了メッセージが表示されるため、「OK」ボタンを押下する。

4) 「DBダンプ(SQLServer)」シートを確認すると、以下のように、Select文の実行結果が出力されることが確認できる。なお、NULL値は「(NULL)」と表示されることが確認できる。

要点まとめ
- Excel VBAでのDB接続先を、MySQL, PostgreSQL, SQL Serverそれぞれに変更することができる。その際、DB接続する処理を変更すれば、Oracleの場合と同じように動くようにできる。







