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