2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Excel VBAを使ってMySQL(MariaDB)からデータを取得

Posted at

はじめに

Excel VBAを使用してMySQL(MariaDB)からデータ取って来るまでの記事です。
今回は以下のバージョンで動作確認しました。
調べてみると同様の記事が多くて恥ずかしいのですが、これは自分用に・・・備忘として投稿します。

OS
Windows10
DB
MariaDB DB-10.4.14
Excel
Microsoft 365(64bit)

ODBCドライバーをインストール

「ODBC MySQL」などの文言で検索してください。
下記のサイトが見つかると思います。

ダウンロードする際、64bitと32bitがありますが、Excelの版に合わせてください。
Excelが64bit版なら、64bitのドライバーを選びます。

VCランタイムをインストール

ODBCをインストールしようとすると、VCランタイムが無いよ!とエラーが表示されることがあります。
「visual c++ runtime」などの文言で検索してください。
例えば、下記のサイトからダウンロードします。

Excelが64bit版ならX64、Excelが32bit版なら、X86を使用します。
上の例ではバージョンは2013ですが、なるべく新しいものを使った方が良いかと思います。

MySQLでの準備

予めMySQLにhugaというユーザーを作成し、パスワードはhogeにしています。
テスト用のデータベースtestを作成し、sampleというテーブルを追加。データを用意しておきます。
image.png

ユーザーhuga君に、データベースtestへのアクセス権限を与えます。
image.png

Excel VBA から MySQL へ接続

ADOを使用しています。接続の所で用いられる接続文字列は「ADO 接続文字列」で検索すると色々出てきます。

Module1
Function testMysql()
    
    Dim cn As Object ' ADOコネクション
    Dim rs As Object ' ADOレコードセット
    Dim r As Range
    Dim i As Long
    
    ' ADOコネクションを作成
    Set cn = CreateObject("ADODB.Connection")
    
    On Error GoTo errorTrap
    
    ' 接続
    cn.Open _
        "DRIVER={MySQL ODBC 8.0 Unicode Driver};" & _
        "SERVER=localhost;" & _
        "DATABASE=test;" & _
        "UID=huga;" & _
        "PWD=hoge;"
    
    ' SQLの実行
    Set rs = cn.Execute("SELECT * FROM sample")
    
    ' 出力開始セル
    Set r = Range("A1")
    
    Do Until rs.EOF ' レコード数だけループ
        For i = 0 To rs.fields.Count - 1 ' フィールド数だけループ
            r.Offset(0, i).value = rs.fields(i) ' セルへ出力
        Next
        Set r = r.Offset(1, 0)  ' 出力セルを一行下へ
        rs.MoveNext             ' 読取レコードも次の行へ
    Loop
 
    ' 解放
    rs.Close
    cn.Close
    Set rs = Nothing
    Set cn = Nothing

Exit Function
' エラー時の処理
errorTrap:
    MsgBox (Err.Description)
    Set rs = Nothing
    Set cn = Nothing
    End
End Function

処理結果

こんな感じで、サクッとデータを取得できます。
image.png

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?