ExcelVBA

Excel VBAで取得するテーブルデータを主キーの昇順にソートしてみた

これまで、Excel VBAでOracleに接続し、指定したSELECT文のデータを繰り返し取得するプログラムを作成していたが、今回はそのプログラムを修正し、SELECT文にorder by句が含まれていない場合は、主キーの昇順にソートするようにしてみたので、そのサンプルプログラムを共有する。

前提条件

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

Excel VBAで複数テーブルのデータを繰り返し取得するプログラムを作成してみた(ソースコード編)今回も引き続き、複数のテーブルデータを繰り返し取得する処理のサンプルプログラムについて述べる。ここでは、具体的なサンプルプログラムのソー...

また、user_dataテーブルのデータが以下のように、主キーの昇順にソートした場合とソートしない場合で結果が異なっていること。
前提条件_1

前提条件_2



サンプルプログラムの作成

修正した「取得」ボタンが押下された場合に呼び出されるプログラム「dbDump」サブプロシージャの内容は以下の通りで、今回追加した「getPrimaryKey」関数で主キー情報を取得し、SQLを生成する「getSQL」関数で、SELECT文にorder by句が含まれていない場合は主キーの昇順にソートするように修正している。



その他、実際に作成したVBAファイルの内容は、以下のサイトを参照のこと。
https://github.com/purin-it/vba/tree/master/excel-vba-oracle-orderby-pkey

サンプルプログラムの実行結果

今回作成したサンプルプログラムの実行結果は、以下の通り。

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

2) 以下のように完了メッセージが表示されるので、「OK」ボタンを押下
サンプルプログラムの実行結果_2

3) 「user_data」シートを確認すると、IDの昇順にデータが出力されることが確認できる。
サンプルプログラムの実行結果_3

4) 今回修正前のサンプルプログラムで同じ処理を実行すると、データの取得結果がIDの昇順でないことが確認できる。
サンプルプログラムの実行結果_4

要点まとめ

  • 主キー情報は、ADOConnectionオブジェクトのOpenSchemaメソッドで、引数adSchemaPrimaryKeysを指定することで、そのレコードセットが取得できる。