エクセルマクロからデータベースのテーブルを読み込んでシートに表示する方法を紹介します。この方法は、少し変えるだけでいろいろなデータベース(SQLサーバー、Access、MySQL、Oracle、等)を利用することができます。
今回は、マクロからデータベースにアクセスするための環境設定を中心にお話しようと思います。テスト用に、ローカルPCのSQLサーバに「kanri」データベースを作成して、そのデータベース内に「emp_main_data」テーブルを作成しました。下表のような内容です。
1)データベースアクセス用のライブラリを使用できるようにする
エクセルを起動した後に「 Alt + F11 」を押して Visual Basic Editor を起動します。
「ツール」から「参照設定」を選択します。参照設定のウインドウが表示されます。「参照可能なライブラリ」のリスト内から「Microsoft ActiveX Data Objects X.X Library」を選択して「OK」してください。X.Xには数字が入りますが、複数あった場合は、数字が最も大きな物を選択してください。
以上でライブラリの設定ができました。データベースをアクセスするためのコードが記述できるようになりました。
2)データベースにアクセスするためのコードを記述する
プロジェクトウインドウ内の「ThisWorkbook」をダブルクリックしてコードを記述するウインドウを開きます。
→ |
入力するコードはこんなかんじです。
Option Explicit ' 社員一覧表示 Private Sub syain_itiran_hyouzi() ' データベースオブジェクト Dim dbConn As ADODB.Connection Dim dbRset As ADODB.Recordset ' データベース接続文字列 Const strConn As String = "Driver={SQL Server}; Server={サーバー名}; Uid={ユーザーID}; Pwd={パスワード}; Database=kanri " ' レコード抽出SQL Const strSQL As String = "SELECT * FROM emp_main_data ; " ' データベース接続 Set dbConn = New ADODB.Connection dbConn.Open strConn ' データ読み込み Set dbRset = dbConn.Execute(strSQL) Do While Not dbRset.EOF ' データ表示(とりあえずイミディエイトウィンドウに表示) Debug.Print dbRset("emp_code") ' 次のレコード読み取り dbRset.MoveNext Loop ' データベース切断 dbConn.Close End Sub
(※サーバー名、ユーザーID、パスワードは、お使いのSQLサーバーの設定に合わせて入力してください。)
このコードを実行すると、「emp_code」の項目が番号順にイミディエイトウィンドウに表示されます。
以上で、マクロからデータベースにアクセスするための環境設定と動作確認が完了しました。
次回は、データベースから読み込んだデータをシートに表示してみます。