「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
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秒 |
結果は一目瞭然です。。。
「セル同士を”=”でつなぐ」のが一番速いです!
まとめ
ここまで、セルのコピー&ペーストの基本から高速化まで解説しました。