ExcelからMySQLのデータを取得する


概要

超久しぶりにExcel VBAを触ることになったんですが、
その内容がMySQLからデータを取ってきて
指定のセルに入れるって処理で。

多分、しばらくこの手の話はこないだろうから、
備忘のために手順を残しておきます。

準備

ODBC Driver for MySQLをダウンロードします
https://www.mysql.com/jp/products/connector/にアクセスします。
②ODBC Driver for MySQL (Connector/ODBC)のダウンロードボタンをクリックします。

③お使いのパソコン環境に合わせて、インストーラーのDownloadボタンをクリックします。

④以下のような画面が表示されるので、とりあえず「No thanks, just start my download」をクリックします。

⑤インストーラーがダウンロードされます。ダウンロード完了したら、インストーラーを起動します。

⑥インストーラーが起動したら、以下のような画面が表示されます。「Next」をクリックしてください。

⑦続いて以下のような画面が表示されます。「License Agreement」をよく読み、問題なければ「I accept・・・」を選択した上で、「Next」をクリックしてください。

⑧セットアップ種別の選択画面が表示されます。とりあえず「Typical」を選択し、「Next」をクリックしてください。

⑨インストールが始まります。

⑩インストールが完了したら、以下のような画面が表示されます。「Finish」をクリックしてインストーラーを終了します。

Excel VBA実装例

ここからは、VBAで処理を実装してみます。
Excelを起動し、開発者タブのVisual Basicをタッチします。

コードエディタが起動します。
ボタンをクリックしたら、MySQLのあるテーブルにSELECT構文のSQLを発行し、データを取得する例です。
※エラー処理は端折ってます。

Private Sub DataGetButton_Click()

    Dim AdoConnection As Object ' ADO コネクション
    Dim AdoRecordSet As Object  ' ADO レコードセット
    Dim SQL As String    ' SQL文

    ' ADOコネクションを作成します
    Set AdoConnection= CreateObject("ADODB.Connection")

    ' ODBC接続を行います
    AdoConnection.Open _
        "DRIVER={MySQL ODBC 8.0 Unicode Driver};" & _
        " SERVER=(servername);" & _
        " DATABASE=(databasename);" & _
        " UID=(username);" & _
        " PWD=(password);"

    ' SQL文を作成します
    SQL = "select tbl_aaa.ID, " & _
            "       tbl_aaa.name, " & _
            "       tbl_aaa.item_num, " & _
            "       tbl_bbb.item_name " & _
            "from tbl_aaa " & _
            "inner join tbl_bbb on tbl_bbb.ID = tbl_aaa.item_id "

    ' SQLを実行します
    Set AdoRecordSet = AdoConnection.Execute(SQL)

    ' 取得したレコードを適当なセルに表示していきます
    i = 0;
    Do Until AdoRecordSet .EOF
        Cells(i, 1) = AdoRecordSet!ID
        Cells(i, 2) = AdoRecordSet!name
        Cells(i, 3) = AdoRecordSet!item_name
        Cells(i, 4) = AdoRecordSet!item_num

        ' 次のレコードに移動
        AdoRecordSet .MoveNext
        i = i + 1
    Loop

End Sub

(servername)、(databasename)、(username)、(password)には、MySQLとの接続情報をセットしてください。