データベースのアクセス方法(1)

エクセルマクロからデータベースのテーブルを読み込んでシートに表示する方法を紹介します。この方法は、少し変えるだけでいろいろなデータベース(SQLサーバー、Access、MySQL、Oracle、等)を利用することができます。

今回は、マクロからデータベースにアクセスするための環境設定を中心にお話しようと思います。テスト用に、ローカルPCのSQLサーバに「kanri」データベースを作成して、そのデータベース内に「emp_main_data」テーブルを作成しました。下表のような内容です。

テストデータ

1)データベースアクセス用のライブラリを使用できるようにする

エクセルを起動した後に「 Alt + F11 」を押して Visual Basic Editor を起動します。

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」の項目が番号順にイミディエイトウィンドウに表示されます。

以上で、マクロからデータベースにアクセスするための環境設定と動作確認が完了しました。

次回は、データベースから読み込んだデータをシートに表示してみます。

2016年10月19日 15時15分