ExcelVBA コピー&ペースト – 高速化

「Excel VBAでセルの値をコピー&ペーストしたい」ことが結構あるかと思います。

コピー&ペーストって使う頻度が多いので、使えるようになるととっても便利ですよね。

そこで今回は、Excel VBAでコピー&ペーストする方法の基本から高速化まで分かりやすく解説します!!

方法はいくつかありますが、「とりあえず結論を知りたい」という方・・・

結論
セル同士を”=”でつなぐのが一番!!

コード

Sub test()

    Range("D3") = Range("B3")

End Sub
こんなあなたにおすすめ
  • コピー&ペーストの方法を知りたい
  • コピー&ペーストを高速化したい

コピー&ペースト

コピー&ペーストには、大きく3つの方法があります。

1つ目は、コピーとペーストを複数行に分けて書く方法。(方法①)

2つ目は、コピーとペーストを1行でまとめて書く方法。(方法②)

3つ目は、”ペーストをしたいセル” = “コピーしたいセル”にする方法。(方法③)

方法①

コピーとペーストを複数行に分けてコードを書いた場合を見ていきましょう。

コード

'=========================================================================================
'●Rangeプロパティを使った場合
'=========================================================================================
Sub test1()

    Range("B3").Copy    'セルの値をコピー
    Range("D3").PasteSpecial (xlPasteAll)   'セルに値をペースト

End Sub

'=========================================================================================
'●Cellsプロパティを使った場合
'=========================================================================================
Sub test2()

    Cells(3, 2).Copy    'セルの値をコピー
    Cells(3, 4).PasteSpecial (xlPasteAll)   'セルに値をペースト

End Sub
●実行前
●実行結果

Rangeプロパティ、Cellsプロパティのどちらでも結果は一緒です。

使い分け方は、以下の通りです。
 コピー&ペーストするセルが固定 → Range
      〃         → Cells

コピー&ペーストをした際、上の実行結果のように「コピー箇所が点線で点滅表示されるのが嫌」という場合には、Application.CutCopyMode = Falseを使うといいよ( •̀ᴗ•́ )و ̑̑
コード

Sub test()

    Cells(3, 2).Copy    'セルの値をコピー
    Cells(3, 4).PasteSpecial (xlPasteAll)   'セルに値をペースト
    Application.CutCopyMode = False 'コピーモードをオフにする

End Sub
●実行前
●実行結果

方法②

コピー&ペーストをたったの1行で書くこともできちゃいます。

実際のコードを見ていきましょう。

コード

Sub test()

    Range("B3").Copy Destination:=Range("D3")

End Sub
●実行前
●実行結果

面倒くさがりなぽちはコードが簡単なこっちがいいね^ ^

実は、上のコードで「Destination:=」を省略できちゃいます( ̄^ ̄)

コード

Sub test()

    Range("B3").Copy Range("D3")

End Sub
●実行前
●実行結果

方法③

最後の方法は、”copy”、”paste”なんて使いません(笑)

「セルの値=セルの値」にすることで、コピー&ペースト的なことをします!

シンプル・イズ・ベスト!

実際にコードを見ていきましょう。

コード

Sub test()

    Range("D3") = Range("B3")

End Sub
●実行前
●実行結果

セルに値を入力、セルの値を取得する方法については、以下の記事をご参照ください。
Excel VBA 値の入力と取得はRange、Cellsプロパティを使うだけ!

実行速度の違い

ここまで、コピー&ペーストのいろんな方法についてご紹介しました。

「実際に実行速度に違いってあるの?」という方、全然違います!

今回は、以下の3つのコードで比較してみました。

  • マクロの記録
  • Copy & Paste メソッド → 上で説明した方法①、②
  • セル同士を”=”でつなぐ → 上で説明した方法③

結論は、「セル同士を”=”でつなぐ」のが一番速いです!

マクロの記録に関しては、コードを記載していませんでしたので、記載しておきます。。。

コード

Sub test()

    Range("A1").Select  'A1セルを選択する
    Selection.Copy  '選択したセルをコピーする
    Range("B2").Select  'B2セルを選択する
    ActiveSheet.Paste   'アクティブシートに貼り付ける

End Sub

実行速度を比較した結果は、下表のとおりです。

コード 10回 100回 1000回
マクロの記録 0.15秒 1.43秒 13.88秒
Copy & Paste 0.09秒 0.77秒 8.02秒
セル同士を”=”でつなぐ 0.00秒 0.02秒 0.07秒

結果は一目瞭然です。。。

「セル同士を”=”でつなぐ」のが一番速いです!

まとめ

ここまで、セルのコピー&ペーストの基本から高速化まで解説しました。

結論
セル同士を”=”でつなぐのが一番!!


参考
Range.Copy メソッド (Excel)Microsoft

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です