プログラミングやパソコン設定など備忘録

あきらちんの技術メモ

VBA

EXCEL VBAでSQL文を使って集計する。複数ブック対応案

投稿日:

EXCEL VBAでSQL文を使って集計する を複数ブックで行う場合を考えてみました。

複数のシートを結合してSQLを発行したい場合に別々のブックであると、コネクションが別々となってしまうため、ひとつのSQLで実行することができません。

そこで今回は、必要なシートをコピーしてきてからSQLを実行するように改良します。

 

従業員マスタのブック

Sheet1に下記内容でデータを用意し、「EXCELでSQLが使える2-1.xlsx」の名前でマクロブックと同じフォルダに保存します。

 

EXCEL VBAでSQL文を使って集計する で利用したマクロブック

Sheet2の集計表に性別と年齢を加えます。

 

集計ボタンをクリックしたときの処理を改良します

改良済みのVBAです。

 

ポイント解説

必要なシートが同じブックにあれば、ひとつのSQLで処理出来るようになりますので、準備した別ブックからシートをコピーします。

・別ブックを開きます。私の環境ではDドライブにブックを保存しましたので CurDir("D") としてあります。ファイル名を普通にフルパスで指定してもOKです。下記2行目

・コピーしてくるシートは、このブックの一番後ろにコピーします。下記3行目

・別ブックをセーブせず閉じます。下記4行目

・コピーしたシートは「従業員マスタ」にシート名を変更します。下記5行目

 

SQL文は下記の様にINNNER JOIN で結合しました。テーブル名には別名を付けてみました。

 

クリアする領域を拡張します。A10:D100 から A10:F100

 

性別と年齢を出力します。

 

最後にコピーしたシートを削除します。

 

ブックを保存し集計ボタンをクリックして実行します。別ブックは閉じておきます。

 

性別と年齢が表示されたでしょうか?

 

最後に

データ量など程度問題だとは思いますが、複数のブックをひとつにまとめてあげることで使い勝手が向上します。

また、別々のブックで管理していても集計時に毎回コピーしてくるため上手く利用すれば便利だと思います。

それから、ここで紹介したVBAではエラー処理など省略していますので、実際に利用する際にはきちんと考えておかないといけません。別ブックが開かれていたらエラーになったりしますので。

 

スポンサードリンク

スポンサードリンク

-VBA
-, , ,

Copyright© あきらちんの技術メモ , 2020 All Rights Reserved Powered by STINGER.