Excel VBA と MySQL

投稿者: | 2012/07/17

先週末からひさびさでExcel VBA をいじっています。
ひさびさなだけに色々と忘れているので、今後に備えて備忘録的に。

MySQL からレコードセットを取得して、Excelで使う

MySQL にSQLを投げて、帰ってきたレコードセットをExcelシート上に展開します。

ADOとMySQLのODBC接続を使うので、以下の2項をお忘れなく。

  1. VBEの参照設定でMicrosoft ActiveX Data Objects 2.x Library の参照
  2. MySQLのODBCドライバダウンロードとインストール
'MySQL 接続
Dim con As New ADODB.Connection
    con.ConnectionString = "Driver={MySQL ODBC 3.51 Driver};" & _
                           "Server=hoge.piyo.com(データベースのあるサーバー)" & _
                           "Port=5963(MySQL用のポート番号)" & _
                           "Stmt=SET NAMES SJIS;(MySQLの文字コードがShift-JIS以外な場合)" & _
                           "Database=fuga(データベース名)" & _
                           "Uid=user(データベースアクセスするユーザー名)" & _
                           "Pwd=passwd(データベースアクセスするパスワード)"
    con.Open

'SQL用意
Dim sql As String
    sql = "SELECT field1, field2, field3, field4 FROM table_name"

'レコードセット取得
Dim rst As ADODB.Recordset
Set rst = con.Execute(sql)

'Excelシート上にレコードセットを展開
Sheets.Add , ActiveSheet ' アクティブシートの後に新規シートを追加
Range("A1").Value = "Field1"   ' 見出しタイトルその1
Range("A2").Value = "Field2"   ' 見出しタイトルその2
Range("A3").Value = "Field3"   ' 見出しタイトルその3
Range("A4").Value = "Field4"   ' 見出しタイトルその4
Range("A2").CopyFromRecordset rst, 65535(貼り付け最大行数)

'後片付け
Set rst = Nothing
con.Close
Set con = Nothing

データベースと違ってExcelは65536行までしか扱えませんので、貼り付け行数の設定には注意しましょう。

 


 

Excel VBA と MySQL」への2件のフィードバック

  1. wedoit

    ExcelでMySQLのデータを取得/更新するなら、ExcelDBToolをお勧めします。
    テーブルのデータをエクセルに取得、更新、削除することだけではなく、複数のSQLを実行して、結果を
    一括Excelの各シートに出力することもできます。データ作成の機能を使って、
    氏名、住所、電話など60種類以上のダミーデータも作成できます。
    作成したデータを直接DBに登録して、シート名とテーブル名が一致すれば、
    一括で複数テーブルのデータもExcelに取得できます。
    詳しくは下記サイトをご参照ください。

    http://www.superdbtool.com
    ベクターからもダウンロードできます。
    MySQL以外、SQL Server,Oracle,Sybase,Sqlite,Postgre,DBもご利用できます。

    返信
  2. uma_blue

    @wedoit さん、コメントありがとうございます!
    おおお、これは良さげ。Σ(꒪⌓꒪ )

    返信

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください