先週末からひさびさで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 さん、コメントありがとうございます!
おおお、これは良さげ。Σ(꒪⌓꒪ )