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

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

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

#準備
ODBC Driver for MySQLをダウンロードします
①[https://www.mysql.com/jp/products/connector/](https://www.mysql.com/jp/products/connector/)にアクセスします。
②ODBC Driver for MySQL (Connector/ODBC)のダウンロードボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/86164801-ab8f-6d1d-c906-8fde49578261.png)

③お使いのパソコン環境に合わせて、インストーラーのDownloadボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/9817a227-8145-a9ec-3550-e5c298f8a6eb.png)

④以下のような画面が表示されるので、とりあえず「No thanks, just start my download」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/8395914f-c5ce-dbbc-dc86-175345d02108.png)

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

⑥インストーラーが起動したら、以下のような画面が表示されます。「Next」をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/c5eba33b-8f79-8223-0d57-5a595a38f409.png)

⑦続いて以下のような画面が表示されます。「License Agreement」をよく読み、問題なければ「I accept・・・」を選択した上で、「Next」をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/49a946a9-b0df-3a07-ef28-4a62127dbe68.png)

⑧セットアップ種別の選択画面が表示されます。とりあえず「Typical」を選択し、「Next」をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/7f4bfd21-0354-3440-46d6-b278f0c7f9aa.png)

⑨インストールが始まります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/917b3b5c-86a6-aecb-8cbb-8dde233a4af7.png)

⑩インストールが完了したら、以下のような画面が表示されます。「Finish」をクリックしてインストーラーを終了します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/9322485d-474f-dc91-39ee-d261243aa068.png)

#Excel VBA実装例
ここからは、VBAで処理を実装してみます。
Excelを起動し、開発者タブのVisual Basicをタッチします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/2bbe905d-9e70-832a-d986-a58c602c8d0b.png)

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

``` vb
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 = 1
    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
    
    AdoRecordSet.Close
    AdoConnection.Close
End Sub
```

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