いろいろなパターンを乗せておきますので、参考にしてください。
単純にコピー&ペーストをする場合
【コピー元.Copy 貼り付け先】でコピペできます。
'同じシート内で一つのセルをコピペ
Cells(1, 1).Copy Cells(1, 2)
'同じシート内で指定した範囲をコピペ
Range("A1:B2").Copy Range("C1:D2")
'別シートの同じ位置にコピペ
Sheets(1).Range("A1:D2").Copy Sheets(2).Range("A1:D2")
'別ブックの同じシート名の同じ位置にコピペ
Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = Workbooks(1).Sheets("Sheet1")Set
ws2 = Workbooks(2).Sheets("Sheet1")
ws1.Range("A1").CurrentRegion.Copy ws2.Range("A1")
いろいろなパターンを紹介しましたが、どれも
【コピー元.Copy 貼り付け先】の形を崩していません。
コピペでエラーがでる原因
上記の画像のように、【Copy】でコピーして、次に【Paste】で貼り付けるとイメージしている方が多いと思いますが、PasteメソッドがRangeオブジェクトにはありません。
【Paste】メソッドはSheetsオブジェクトにあるメソッドなのでエラーが発生します。
値のみをコピー&ペーストする場合
コピペする方法は2種類あります。
・【貼り付け先のセル.Value = コピー元のセル.Value】
・【貼り付け先のセル.PasteSpecial Paste:=xlPasteFormats】
です。
'値を代入する方法
Cells(1, 2).Value = Cells(1, 1).CurrentRegion.Value
'PasteSpecialメソッドを使用する方法
Cells(1, 1).CurrentRegion.Copy 'コピー元のコピー
Cells(1, 3).PasteSpecial Paste:=xlPasteValues '値のみ貼り付け
Application.CutCopyMode = False 'コピー範囲の取り消し
2つの貼り付けの問題点
一つ目は複数セルをまとめて貼り付ける場合、貼り付け元も同じ範囲を選択しておかないと、貼り付け漏れが発生するリスクがあります。
二つ目はコピー範囲が残ってしまうので、【Application.CutCopyMode】を取り消さないといけない点です。(気にならなければ問題なし。)
一つのセルをコピペしたい場合は一つ目を
複数セルをコピペしたい場合は二つ目を使うことをおすすめします。
どちらがいいというわけではなく、使い分けるといいかなと思います。
書式のみコピー&ペーストしたい場合
【PasteSpecial】を使用します。
値貼り付けの時は【Paste:=xlPasteValues】を使用しましたが、今回は
【Paste:=xlPasteFormat】を使用するだけです。
Cells(1, 1).CurrentRegion.Copy 'コピー元のコピー
Cells(1, 3).PasteSpecial Paste:=xlPasteFormats '値のみ貼り付け
Application.CutCopyMode = False 'コピー範囲の取り消し
【PasteSpecial】は応用力があって便利ですね笑
まとめ
いろいろなコピペ方法がありますので、複数使いこなすことができればきれいなコードを記述する一助になるとおもいますので、ぜひ活用してみてください。
コメント