第2回 copyfromrecordsetはなぜ速い?理由を分解して徹底解説!
前回の記事(copyfromrecordsetの基本的な使い方)では、VBAでAccessなどから取り出したデータをExcelに高速で貼り付ける方法をご紹介しました。
今回はその続きとして、「なぜcopyfromrecordsetはこんなに速いのか?」という疑問に答えていきます!
1.なぜ copyfromrecordset は速いのか?
Excelの通常処理では、Forループなどを使って1セルずつデータを貼り付けることが少なくありません。
しかし、この方法は「セル1個ごとの処理」となるため、件数が多くなると処理時間が激増します。
それに対して、copyfromrecordset は一括書き込みでデータを貼り付けるため、ループによるオーバーヘッドが発生せず、メモリ上で効率的に処理されます。
2.処理の流れを図でイメージしてみよう
AccessやSQL Server → Recordset(データ)
↓
copyfromrecordsetメソッド
↓
ExcelシートのRangeに一括書き込み
3.どれくらい差が出るの?
例えば以下のようなデータ件数で比較してみると…
件数 | copyfromrecordset | Forループで貼り付け |
---|---|---|
1,000件 | 約0.2秒 | 約1.8秒 |
10,000件 | 約0.5秒 | 約17秒 |
100,000件 | 約3秒 | 数分(フリーズしちゃうかも) |
数万件を扱うような業務では、copyfromrecordsetの効果は絶大です。
※実測環境:Core i5 / 8GB / Office 365

やっぱり、copyfromrecordsetを使った方が高速だニャー!
copyfromrecordsetを使いこなそう!
4.データサイズとスピードの関係
copyfromrecordsetは、件数が増えても処理速度が低下しにくいという特徴があります。
ただし、貼り付けた結果に空白セルやNullが多い場合は、あとから整形処理(空白削除・罫線整備など)が必要になることもあります。
5.使うときの注意点
- 貼り付け先セルの指定ミスで既存データを上書きしないよう注意!
- Recordsetが閉じていないことを確認
- 列数とフィールド数の対応にズレがないか事前チェック
まとめ
copyfromrecordsetが速い理由は、ループ処理を省略し、メモリ上でデータを一括転送するという、非常に効率の良い方法をとっているためです。
AccessやSQL Serverなどと連携しながら大量データをExcelに出力したいとき、 copyfromrecordsetは“VBA高速化の切り札”となります✨ 次回(第3回)では、copyfromrecordsetの応用テクニックについてご紹介予定です。
どうぞお楽しみに❣


コメント