「コピーして貼り付ける」は、たくさん方法がありますので順番に紹介。
①~⑤まで5パターン紹介していますが、
上に書いている方が、簡単ですが遅くエラーが出やすい
下に書いている方が、難解ですが速くエラーが出にくい
順番で紹介しています。
読みやすさやわかりやすさを目安に、最適な方法を採用しましょう。
Sub コピーして貼り付ける①_基本的に非推奨()
Range("A1").Copy 'コピーする
Range("A3").PasteSpecial 'すべて貼り付ける
End Sub
この方法がキーボードやマウスの動きと同じなので一番わかりやすいですが、この方法は
非推奨です。
この方法は、
1.コピーする
↓
2.後ろ側でクリップボードへデータが送られる
↓
3.貼り付ける
という工程なので、VBAは非常に高速に処理がされる関係上、
2が処理が完了する前に3が起こりやすく、無駄なエラーが頻発します。
そのため、基本的には後述の方法のどれかを使うようにしましょう。
【参考】
「クリップボード」とは、コピーしたデータを一時格納する場所です。
文字だけでなく画像なども格納できるため、エクセルからパワーポイントへなど
ソフトをまたいでコピペできる反面、VBAで処理する際は、
この便利仕様により生まれる処理の重さがあだになり、エラーが発生しやすくなります。
Sub コピーして貼り付ける②_一行で処理()
Range("A1").Copy Range("A3")
End Sub
この方法も、実はクリップボードを使用していますが、
「コピーする工程」と「貼り付ける工程」を分けていないため、
①をこちらの方法へ書き換えるだけで、エラーは減少することが多いです。
Sub コピーして貼り付ける③_高速版1()
コピペしたい内容 = Range("A1")
Range("A3") = コピペしたい内容
End Sub
変数「コピペしたい内容」に一旦格納することで、
copyとは違いクリップボードを経由しないため動作が安定します。
この方法は値しかコピペできないため、書式などは別途対応する形です。
Sub コピーして貼り付ける④_高速版2()
Range("A3").Value = Range("A1").Value
End Sub
貼り付け先の場所:Range("A3") と
貼り付け元の場所:Range("A1") を=でつなぐだけで値をコピペできます。
値をコピペするだけなら、この方法が一番見やすくわかりやすいので推奨です。
必ず「.Value」を付ける必要があるのと、貼り付け先を先に書く点に注意です。
Sub コピーして貼り付ける⑤_valueで書式も貼付()
Range("A3").Value(xlRangeValueXMLSpreadsheet) = Range("A1").Value(xlRangeValueXMLSpreadsheet)
End Sub