「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