ExcelVBA

Excel VBAで各DBに接続し取得したテーブルデータを1シートにまとめて出力してみた

前回は、Excel VBAでOracleに接続し、指定したSELECT文の実行結果を1シートにまとめて出力してみたが、今回はMySQL, PostgreSQL, SQL Serverそれぞれに接続し同じように結果を出力してみたので、そのサンプルプログラムを共有する。

前提条件

下記記事のサンプルプログラムの作成が完了していること。

Excel VBAでOracle接続し取得したテーブルデータを1シートにまとめて出力してみたこれまで、Excel VBAでOracleに接続し、指定したSELECT文のデータを繰り返し取得するプログラムを作成していたが、今回はS...

また、下記記事に記載されている、MySQLとPostgreSQLでのユーザー作成が完了していること。

MySQLでユーザーを作成しテーブルを追加してみたMySQLの場合は、Workbenchを利用すると、スキーマ(データベース)やユーザーの作成をGUIベースで実施できる。今回は、Work...
Postgresqlでユーザーを作成しテーブルを追加してみたPostgresqlの場合は、pgAdminを利用すると、ユーザーやデータベースの作成をGUIベースで実施できる。今回は、pgAdmin...

さらに、下記記事の「前提条件」の内容が完了していること。

Spring BootでSQL Serverに接続しMyBatisを利用してみた今回は、Spring Bootアプリケーションで接続するデータベースをSQL Serverに変更してみたので、そのサンプルプログラムを共...

やってみたこと

  1. Oracleの場合のサンプルプログラム
  2. MySQLの場合のサンプルプログラム
  3. PostgreSQLの場合のサンプルプログラム
  4. SQL Serverの場合のサンプルプログラム

Oracleの場合のサンプルプログラム

Oracleの場合のサンプルプログラムは、以下の前提条件の記事を参照のこと。

Excel VBAでOracle接続し取得したテーブルデータを1シートにまとめて出力してみたこれまで、Excel VBAでOracleに接続し、指定したSELECT文のデータを繰り返し取得するプログラムを作成していたが、今回はS...



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

「FlexClip」はテンプレートとして利用できる動画・画像・音楽などが充実した動画編集ツールだったテンプレートとして利用できるテキスト・動画・画像・音楽など(いずれも著作権フリー)が充実している動画編集ツールの一つに、「FlexCli...

また、MySQLのuser01データベースの、user_dataテーブル、m_sexテーブルに、以下のデータを作成しておく。
MySQLのDB_1

MySQLのDB_2

さらに、MySQLの場合の実行結果は、以下の通り。

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

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

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

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

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

「EaseUS Todo Backup」は様々な形でバックアップ取得が行える便利ツールだったパソコン内のデータを、ファイル/パーティション/ディスク等の様々な単位でバックアップしたり、バックアップのスケジュール設定や暗号化設定も...

また、PostgreSQLのODBCドライバをインストールする必要がある。その手順は、以下のサイトを参照のこと。
https://www.projectgroup.info/documents/PostgreSQL/POS_000008.html

さらに、PostgreSQLのUSER01データベースの、user_dataテーブル、m_sexテーブルに、以下のデータを作成しておく。
PostgreSQLのDB_1

PostgreSQLのDB_2



また、PostgreSQLの場合の実行結果は、以下の通り。

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

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

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

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

「HD Video Converter Factory Pro」は動画の形式変換や編集・録画等を行える便利ツールだった動画の形式変換や編集・録画等を行える便利ツールの一つに、「HD Video Converter Factory Pro」があります。ここ...

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テーブルに、以下のデータを作成しておく。
SQLServerのDB_1

SQLServerのDB_2

さらに、SQL Serverの場合の実行結果は、以下の通り。

1) サンプルプログラム「DbDump(SQLServer).xlsm」を開き、下記のように値を入力し「取得」ボタンを押下する。
SQLServerの実行結果_1

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

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

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

要点まとめ

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