MySQLデータベースへの接続には、ODBCの設定を行う方法が一般的ですが、VBAだけで接続することも可能です。そしてそちらの方が単純です。

VBAだけで行うため、他のPCでの利用する場合でもマクロを持っていくだけで利用できるようになります。

この記事では、Excel VBAからMySQLへ接続する方法を詳しく解説します。

基本的な接続方法

以下はコード内でMySQL接続先を指定し、SELECT文を実行してその結果をセルに出力する例です。

重要なのは接続文字列の作成部分で、ここにMySQLへの接続情報を記載します。

パラメータ 説明
Driver 使用するODBCドライバー名 {MySQL ODBC 8.0 Unicode Driver}
Server MySQLサーバーのホスト名またはIPアドレス localhost, 192.168.1.100
Port ポート番号(省略時は3306) 3306
Database 接続するデータベース名 testdb
User ユーザー名 testuser
Password パスワード yourpassword
Option ODBC Driverの接続オプション。通常のSQL利用であれば3でよい。 3

1. ADODB.Connection

ADODB.Connectionとは、VBA からデータベースへ接続するためのオブジェクトです。

VBA で MySQL や SQL Server、Access、Oracle など外部データベースに接続するときは、必ずこの ADODB.Connection を使います。

ADODB.Connection は以下のようなVBAとデータベースを繋げる際の処理で利用します。

1. データベースへ接続する

2. SQL を実行する(SELECT、INSERT、UPDATE、DELETEなど)

3. トランザクション処理(BeginTrans / CommitTrans / RollbackTrans)

4. 接続を閉じる

2. ADODB.Recordset

ADODB.Recordset(レコードセット)とは、データベースの SELECT 結果(複数行・列のデータ)を保持する入れ物です。主に以下の用途で利用します。

1. SQL の SELECT 結果を受け取る

2. レコード行を順に読みこむ

3. レコード数・フィールド数の取得

4. 列名やインデックスでアクセス

5. 終了処理

接続できない場合

MySQLに接続できない場合、多くの原因は接続文字列にあります。以下の確認を行ってください。

  1. ドライバ名(Driver=…)が正しいか。
  2. パスワードは正しいか。
    MySQLのコマンドラインでの接続文字列は「mysql -u testuser -pyourpassword testdb」のように、パスワード部分を示す”-p”と実際のパスワード”yourpassword”がスペースなしで「-pyourpassword」のようになっています。VBAのパスワードに”p”が誤って付いていないか確認してください。
  3. ポート 3306 が開いているか。
  4. MySQL のユーザー権限が正しいか。
  5. 認証方式(MySQL 8 の sha2-password)でエラーが出ていないか。
  6. 文字化けをする場合は文字コード設定が合っているか(utf8mb4 推奨)

上のサンプルではport(ポート番号)やCharset(文字コードセット)などを書いていませんが、以下のように追加すると問題が解決することもあります。