Excel VBAでセルのコピーや貼り付けを行っていると、
- データ量が増えた途端に処理が遅くなる
- 数万行の転記でExcelが固まる
- マクロ実行中に「応答なし」になる
といった経験はないでしょうか。
実は、VBAでよく使われる Copy や PasteSpecial は、使い方によっては処理速度を大きく低下させてしまいます。
特に大量データを扱うマクロやループ処理では致命的です。
このページでは、
- VBAでセルコピーが遅くなる原因
- 処理速度を劇的に改善する書き方
- 実務で使える高速化テクニック
を、できるだけ分かりやすく解説します。
VBAでセルのコピー処理が遅くなる原因
VBAでセルコピーが遅くなる最大の理由は、Copy や PasteSpecial が画面操作を伴う処理だからです。
Excelは次のような処理を裏で行っています。
- セル範囲の選択
- クリップボードへのコピー
- 貼り付け形式の判定
- 画面更新
この一連の動作が、ループ内で何百回・何千回と繰り返されることで、処理速度が一気に低下します。
特に、検索結果をコピーして転記するようなマクロを作っている場合は注意が必要です。
検索処理については、以下のページもあわせて読むと理解が深まります。
▶エクセルで検索ボックスを作り誰でも簡単に検索できるようにする方法
一般的なCopy / Pasteの書き方(遅い例)
VBAでよく見かけるのが、次のようなコードです。
Range("A1:D1000").Copy
Range("F1").PasteSpecial xlPasteValues
少量のデータであれば問題ありませんが、
数千行以上のデータを扱う場合は非推奨です。
この書き方をループ処理で使うと、処理時間が一気に伸びてしまいます。
【結論】最速なのはValue代入によるコピー
セルのコピー処理を高速化したい場合、最もおすすめなのが
Value代入を使った方法です。
Value代入を使った高速コピー方法
Range("F1:I1000").Value = Range("A1:D1000").Value
この方法は、
- 画面操作を行わない
- クリップボードを使わない
- VBA内部で一括処理できる
という特徴があり、Copy / PasteSpecial と比べて圧倒的に高速です。
実務で大量データを扱う場合は、基本的にこの書き方を使うと考えて問題ありません。
さらに処理速度を上げる必須の高速化設定
Value代入とあわせて、必ず行っておきたいのがExcel全体の高速化設定です。
処理前に入れておくコード
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
処理後に元に戻すコード
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
これらを組み合わせることで、
特に複数ファイルを扱う処理や大量データ処理で効果を発揮します。
複数ファイルを一括処理するマクロについては、以下のページも参考になります。
別ファイルを1つずつ処理するだけでなく、複数のExcelファイルを一括で処理したい場合は、以下のページが参考になります。
▶エクセルで別のファイルからデータを引っぱる方法
検索で見つけた複数のファイルを順番に開いて処理する場合は、複数ファイル処理の考え方が欠かせません。
▶Excel VBAで簡単!フォルダ内ファイルを部分一致検索するボタンを作る方法
特に複数ファイルを一括処理する場合、セルコピー処理の高速化は必須になります。
▶エクセルのマクロで特定のセルの文字列をコピーするボタンを作る方法
大量データ・実務での活用例
今回紹介した高速化テクニックは、次のような実務シーンで特に効果的です。
- 検索結果を別シートへ転記
- 別ファイルからデータを取得して集計
- 生産管理・売上管理システム
- 数万行のデータ更新処理
別ファイルからデータを取得・転記する基本については、こちらの記事で詳しく解説しています。
よくある質問(FAQ)
Copyはもう使わない方がいいですか?
少量データであれば問題ありませんが、大量データを扱う場合はValue代入をおすすめします。
書式ごとコピーしたい場合はどうすればいいですか?
Value代入は「値のみ」のコピーです。
書式が必要な場合は、目的に応じて PasteSpecial を使い分けてください。
エラーが出る原因は何ですか?
コピー元と貼り付け先のセル範囲サイズが一致していない場合にエラーが発生します。
まとめ
Excel VBAでセルのコピーや貼り付けを高速化するには、
Copy/PasteSpecialを多用しない- Value代入を使う
- 高速化設定を必ず行う
この3点を意識するだけで、処理速度は大きく改善します。
特に大量データや実務システムでは、コピー処理の高速化が業務効率を大きく左右します。
本ページの内容をベースに、ぜひあなたのマクロにも取り入れてみてください。

コメント