トップへ(mam-mam.net/)

MySQLに接続してレコードを取り出す ~Excel VBA

MySQLに接続してレコードを取り出す ~Excel VBA

ExcelからVBAでMySQLにODBC接続すればデータベース テーブルからデータを取り出すことが出来ます。

MySQL接続ODBCドライバーをダウンロード

MySQL接続ODBCドライバーを以下URからダウンロードします。
https://dev.mysql.com/downloads/connector/odbc/
もしくは、古いバージョンのMySQLに接続したい場合は以下URLからダウンロードします。
https://downloads.mysql.com/archives/c-odbc/

(注意)
64BitのMySQL ODBCドライバをインストールした場合は、64Bitのエクセルからしか接続できません。
32BitのMySQL ODBCドライバをインストールした場合は、32Bitのエクセルからしか接続できません。
お使いのExcelのバージョンを確認するには、
①Excelを起動 ②[ファイル]⇒[アカウント]をクリック ③[バージョン情報]をクリック
すると、開いたウィンドウの上部に「32 ビット」、又は「64 ビット」のどちらかが記載されています。

私は[8.0.40]を選択して「Windows (x86, 32-bit), MSI Installer」をクリックしました。
「Login Now or Sign Up for a free account.(今すぐログインかサインアップ)」と出てきたら、下のほうにある
「No thanks, just start my download.」を押すとサインアップせずにダウンロードできます。

ダウンロードしたMySQL接続ODBCドライバのインストールMSIファイル(mysql-connector-odbc-8.0.25-win32.msiなど)をダブルクリックしてインストールします。

MySQL接続ODBCドライバーをインストールするとエラー

「This application requires Visual Studio 2019 x86 Redistributable.Please install the Redistributable then run this installer again.」
とエラー表示された場合は
https://support.microsoft.com/ja-jp/topic/%E6%9C%80%E6%96%B0%E3%81%AE%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88%E3%81%95%E3%82%8C%E3%82%8B-visual-c-%E3%81%AE%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89-2647da03-1eea-4433-9aff-95f26a218cc0
のダウンロードサイトを開いて、
32Bitの場合は「vc_redist.x86.exe」、64Bitの場合は「vc_redist.x64.exe」をダウンロードして先にストールしてから、MySQLのインストール用MSIファイルを再度インストールします。

「ODBC Data Source」を起動してドライバ名の確認

インストールしたドライバ名の確認が必要なので、「ODBC Data Source」の32ビット又は64ビットを起動します。
①OSの[スタート]ボタンをクリック
② ⇒ キーボードから「odbc」と打つ
③  ⇒ 「ODBC Data Source(32-bit)」又は「ODBC Data Source(32-bit)」をクリックして起動します。
④[ドライバー]タブをクリックします。
インストールしたドライバーによって表記が違うのですが
「名前」列にある「MySQL ODBC 8.0 UNICODE DRIVER」等のドライバ名を確認して正確にメモしておきます。
後ほどVBAでドライバ名を使用するからです。
(例)con.ConnectionString = "DRIVER={MySQL ODBC 8.0 Unicode Driver};"

VBAでMySQLにODBC接続するソースコード

以下ソースコードの
ドライバ名データベース名localhost接続ユーザー名接続パスワードテーブル名
はご自身の環境に合わせて書き換えてください。

Sub MySQL_Connect_Select()
    Dim con As Object
    Dim rs As Object
    Dim sql As String
    Dim r As Long, c As Long
    
    Set con = CreateObject("ADODB.Connection")
    
    'ドライバ名は上記で調べたドライバ名に書き換えてください
    con.ConnectionString = _
      "DRIVER={ドライバ名};" & _
      "SERVER=localhost;" & _
      "PORT=3306;" & _
      "CHARSET=sjis;" & _
      "DATABASE=データベース名;" & _
      "UID=接続ユーザー名;" & _
      "PWD=接続パスワード;"
    con.Open
    
    sql = "select * from テーブル名"
    Set rs = con.Execute(sql)
    
    r = 1
    'カラム名出力
    For c = 1 To rs.Fields.Count
      Cells(r, c).Value = rs(c - 1).Name
    Next
    
    '各行のデータを出力
    Do Until rs.EOF
      r = r + 1
      For c = 1 To rs.Fields.Count
        Cells(r, c).Value = rs(rs(c - 1).Name)
      Next
      rs.movenext
    Loop
    
    rs.Close
    con.Close
    Set rs = Nothing
    Set con = Nothing

End Sub