トップページ(目次)

509.コピーして貼り付ける

「コピーして貼り付ける」は、たくさん方法がありますので順番に紹介。 ①~⑤まで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
Value(xlRangeValueXMLSpreadsheet)という書き方をすれば、値と書式を同時にコピペできます。

Copyright © 2021 https://excel3000.web.fc2.com/ All Rights Reserved.
    inserted by FC2 system