サイトアイコン HIBISEI Blog

Excel VBAでセルのコピー&貼り付けを高速化する方法

Excel VBAでセルのコピーや貼り付けを行っていると、

といった経験はないでしょうか。

実は、VBAでよく使われる CopyPasteSpecial は、使い方によっては処理速度を大きく低下させてしまいます。
特に大量データを扱うマクロループ処理では致命的です。

このページでは、

を、できるだけ分かりやすく解説します。


VBAでセルのコピー処理が遅くなる原因

VBAでセルコピーが遅くなる最大の理由は、CopyPasteSpecial画面操作を伴う処理だからです。

Excelは次のような処理を裏で行っています。

この一連の動作が、ループ内で何百回・何千回と繰り返されることで、処理速度が一気に低下します。

特に、検索結果をコピーして転記するようなマクロを作っている場合は注意が必要です。
検索処理については、以下のページもあわせて読むと理解が深まります。

▶エクセルで検索ボックスを作り誰でも簡単に検索できるようにする方法


一般的なCopy / Pasteの書き方(遅い例)

VBAでよく見かけるのが、次のようなコードです。

Range("A1:D1000").Copy
Range("F1").PasteSpecial xlPasteValues

少量のデータであれば問題ありませんが、
数千行以上のデータを扱う場合は非推奨です。

この書き方をループ処理で使うと、処理時間が一気に伸びてしまいます。


【結論】最速なのはValue代入によるコピー

セルのコピー処理を高速化したい場合、最もおすすめなのが
Value代入を使った方法です。

Value代入を使った高速コピー方法

Range("F1:I1000").Value = Range("A1:D1000").Value

この方法は、

という特徴があり、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でセルのコピーや貼り付けを高速化するには、

この3点を意識するだけで、処理速度は大きく改善します。

特に大量データや実務システムでは、コピー処理の高速化が業務効率を大きく左右します。
本ページの内容をベースに、ぜひあなたのマクロにも取り入れてみてください。

モバイルバージョンを終了