非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

【ExcelVBA】XserverVPS上のMySQLをExcelから直接操作する

   

Excel VBAを用いてXserver VPS上に構築されたMySQLデータベースへ直接アクセスし、データを取得・操作する方法です。Python等の外部言語を介さず、Excel標準の機能であるADO(ActiveX Data Objects)とMySQL提供のODBCドライバを組み合わせることで、既存の帳票出力を劇的に高速化できる。ドライバのインストールから、具体的な接続コードの実装までを書き留めておきます。

Connector/ODBC のダウンロード・インストール

まずはWindowsとMySQLを橋渡しする「Connector/ODBC」を入手します。

  1. MySQL公式サイトへアクセスします。
  2. インストールされている Excelのビット数(32bit/64bit) に合わせたインストーラー(MSI Installer)を選択しましょう。
    ※Windowsが64bitでも、Excelが32bitなら32bit版ドライバが必要です。
  3. ダウンロードボタン押下後、サインアップを促されますが、下部の “No thanks, just start my download.” をクリックすることで登録なしでダウンロード可能です。
  4. 入手した .msi ファイルを実行し、標準設定のままインストールを完了させます。

 

インストール済みドライバのバージョン確認

VBAに記述する「正確なドライバ名」を特定します。

  1. Windowsの検索バーに 「ODBC」 と入力し、「ODBC データソース (64ビット)」(または32ビット)を起動します。
  2. 「ドライバー」 タブをクリックし、一覧にある名前を確認します。
  3. MySQL ODBC 9.6 Unicode Driver など、表示されている文字列をメモします。
    ※この文字列が1文字でも違うと、VBA実行時に「ドライバが見つかりません」というエラーになります。

 

 

VBAソースコードの実装

標準モジュールに以下のコードを記述します。

Sub ConnectToMySQL()
    ' ADOオブジェクトの宣言(実行時バインディング)
    Dim conn As Object
    Dim rs As Object
    Dim connectionString As String
    
    ' インスタンスの生成
    Set conn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")
    
    ' --- 接続文字列の設定 ---
    ' DRIVER: ODBCデータソースで確認した正確な名称を指定
    ' SERVER: サーバーのドメイン名またはIPアドレス
    connectionString = "DRIVER={MySQL ODBC 9.2 Unicode Driver};" & _
                       "SERVER=satoshi71.com;" & _
                       "DATABASE=database_name;" & _
                       "USER=admin;" & _
                       "PASSWORD=your_password;" & _
                       "PORT=3306;" & _
                       "OPTION=3;"

    On Error GoTo ErrorHandler
    
    ' データベース接続開始
    conn.Open connectionString
    
    ' SQLクエリの実行(usersテーブルから全件取得)
    rs.Open "SELECT * FROM users", conn
    
    ' セルA1を起点に、取得したレコードセットを一括展開
    If Not rs.EOF Then
        Sheet1.Range("A1").CopyFromRecordset rs
    End If
    
    MsgBox "データの読み込みに成功しました。", vbInformation
    
CleanUp:
    ' 後処理:接続を閉じてメモリを解放
    If Not rs Is Nothing Then If rs.State = 1 Then rs.Close
    If Not conn Is Nothing Then If conn.State = 1 Then conn.Close
    Set rs = Nothing
    Set conn = Nothing
    Exit Sub

ErrorHandler:
    ' エラー発生時の通知(接続文字列のミスやネットワークエラーなど)
    MsgBox "接続失敗: " & Err.Description, vbCritical
    Resume CleanUp
End Sub
 

 

スポンサーリンク

 - Excel, VBA, Xserver VPS