Excel-VBAのADOでデータベーステーブルの内容をForを使わずに一括する転記する方法
Recordsetの内容をFor分で回さずにシートへ反映する
例:ACCESSファイルのテーブル情報を取得して一括でEXCELへ反映させる
使用するACCESSファイルには下記のような商品マスターテーブルがある
これをExcelのVBAからADOでデータ取得し、下記のように用せずに一括で反映させる。
使用するADOのバージョンは迷いがちだが、今ではすっかりOFFICE365のExcelを使用している企業が殆なので、古いバージョンの事は余程配慮が必要でなければ、【Microsoft ActiveX Data Object 6.1 Library】を選択すれば良いだろう。
稀に、32ビット版をまだ使用している場合は【Microsoft ActiveX Data Object 2.8 Library】を使用する事になる。
SQLでデータを取得し、Excelのワークシートへ一括反映させるコードのサンプルは下記となる。
Dim sql_con As New ADODB.Connection
Dim sql_rs As New ADODB.Recordset
sql_con.Open "Provider=Microsoft.ACE.OLEDB.16.0;Data Source=P:\OneDrive\Download\test\test.accdb"
Set sql_rs = sql_con.Execute("SELECT * FROM 商品マスター")
Range("A1").CopyFromRecordset Data:=sql_rs
sql_rs.Close
sql_con.Close
Set sql_rs = Nothing
Set sql_con = Nothing
Rangeが持つCopyFromRecordsetメソッドで、指定したセルから、一括で表形式でデータベースから取得した内容を反映させる事が出来る。
EXCELのVBAでデータベースを取得してから、条件によって色々処理を行う場合も、レコードセット上で行うよりも、Excelが持つ機能で行う方が処理は高速になる事が殆なので、オリジナルコードでガリガリ作っていくよりも、EXCELのVBAならではの実装の方が良いだろう。