先週末からひさびさでExcel VBA をいじっています。
ひさびさなだけに色々と忘れているので、今後に備えて備忘録的に。
MySQL からレコードセットを取得して、Excelで使う
MySQL にSQLを投げて、帰ってきたレコードセットをExcelシート上に展開します。
ADOとMySQLのODBC接続を使うので、以下の2項をお忘れなく。
- VBEの参照設定でMicrosoft ActiveX Data Objects 2.x Library の参照
- 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でMySQLのデータを取得/更新するなら、ExcelDBToolをお勧めします。
テーブルのデータをエクセルに取得、更新、削除することだけではなく、複数のSQLを実行して、結果を
一括Excelの各シートに出力することもできます。データ作成の機能を使って、
氏名、住所、電話など60種類以上のダミーデータも作成できます。
作成したデータを直接DBに登録して、シート名とテーブル名が一致すれば、
一括で複数テーブルのデータもExcelに取得できます。
詳しくは下記サイトをご参照ください。
http://www.superdbtool.com
ベクターからもダウンロードできます。
MySQL以外、SQL Server,Oracle,Sybase,Sqlite,Postgre,DBもご利用できます。
@wedoit さん、コメントありがとうございます!
おおお、これは良さげ。Σ(꒪⌓꒪ )