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

ExcelからVBAでMySQLに接続してテーブルからデータを取り出すには

検索:

「ExcelからVBAでMySQLに接続してテーブルからデータを取り出すには」

ExcelからVBAでMySQLにODBC接続してテーブルからデータを取り出すには

回答

VBAからODBCでMySQLに接続すれば、ExcelのVBAからMySQLを扱えます。

まずは、MySQL接続ODBCドライバーをダウンロードします。
https://dev.mysql.com/downloads/connector/odbc/
から32BitのODBCドライバをダウンロードします。
私は「Windows (x86, 32-bit), MSI Installer」をクリックしました。
「Login Now or Sign Up for a free account.(今すぐログインかサインアップ)」と出てきたら、下のほうにある
「No thanks, just start my download.」を押すとサインアップせずにダウンロードできます。

古いバージョンのMySQLに接続したい場合は
https://downloads.mysql.com/archives/c-odbc/
からバージョンを指定してダウンロードできます。

ダウンロードしたMySQL接続ODBCドライバのインストールMSIファイル(mysql-connector-odbc-8.0.25-win32.msiなど)をダブルクリックしてインストールします。
「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
から「vc_redist.x86.exe」をダウンロードしてダブルクリックして先にストールしてから、MySQLのインストール用MSIファイルをインストールします。


インストールしたMySQL接続ODBCドライバは、
OS標準の「ODBC データ ソース アドミニストレーター(32ビット)」の「ドライバ」タブから確認できます。
「ODBC データ ソース アドミニストレーター(32ビット)」を起動するには、
OSの[スタート]ボタンをクリック ⇒ キーボードから「odbc」と打つ ⇒ 「ODBC Data Source(32-bit)」をクリック
すると起動できます。


MySQL接続ODBCドライバがインストールできたら、VBAなどからMySQLに接続できます。

ソース

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")
    
    'DRIVER={ドライバ名}
    '  のドライバ名は、
    '  OS標準の「ODBC データ ソース アドミニストレーター(32ビット)」の「ドライバ」タブから確認できます
    '  通常は
    '    {MySQL ODBC 8.0 Unicode Driver}
    '  古いMySQLに接続する為に古いODBCドライバをインストールした場合は
    '    {MySQL ODBC 5.3 Unicode Driver}
    '  など
    
    con.ConnectionString = _
      "DRIVER={MySQL ODBC 8.0 Unicode 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