Translate

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ならではの実装の方が良いだろう。

このブログの人気の投稿

VBAのADOで「パラメーターが少なすぎます。xを指定してください。」と表示された場合の原因

ACCESSでバーコードスキャンしたら自動でイベントを起こす方法

PostgreSQL 11 でpg_dumpallを使ってバックアップしたデータをリストアするとき文字化けの対処法

ACCESSのVBAを実行するとACCESSが強制終了する事がある

VBSでマクロの実行時に警告を非表示にする方法

ACCESSのVBAでADOを利用したバインド変数を利用したデータベース連携方法

ACCESSでバーコードをスキャンして登録更新する簡単なサンプル

pgAdmin 4が遅いのは仕方がない | PostgreSQL things.

ACCESSのVBAでリストビュー(ListView)を使う為の設定 | Office365

ASP.NETのでクライアント証明書を使ったログイン認証を行う方法