セルをコピー・カット・ペーストする方法を解説します。
RangeオブジェクトのCopy・Cutメソッドを使用します。
これらのメソッドはペースト先を直接指定できますので、
Pasteメソッドを使用する必要はありません。
セルをコピーする - Range.Copy
基本構文
コピー元セル範囲.Copy コピー先セル ' ※ 引数名を明記 コピー元セル範囲.Copy Destination:=コピー先セル
サンプルコード
Dim コピー元セル範囲 As Range Set コピー元セル範囲 = ThisWorkbook.Worksheets("Sheet1").Range("A1:C3") Dim コピー先セル As Range Set コピー先セル = ThisWorkbook.Worksheets("Sheet2").Range("E1") ' セル範囲をコピー コピー元セル範囲.Copy コピー先セル ' 変数を利用せず直接指定 ThisWorkbook.Worksheets("Sheet1").Range("A1:C3").Copy _ ThisWorkbook.Worksheets("Sheet2").Range("E1")
解説
セルをコピーするには、
RangeオブジェクトのCopyメソッドを使用します。
第1引数Destinationにコピー先のセル(Range)を指定でき、
指定したセルへのペーストも同時に実行してくれます。
この場合コピー先には左上のセルだけを指定すればOKで、
例のようにA1:C3をE1へコピーするとE1:G3へペーストされます。
別シート間・別ブック間であっても問題なく実行できますので、
基本的にはこの記述だけ覚えておけばOKです。
ちなみに引数名の指定「Destination:=」はサンプルの通り省略可能です。
Copyメソッドには引数はひとつしかありませんので、
常に省略記法を用いてしまって構いません。
なお、行先を省略して実行した場合は、
その場合はセルがクリップボードへコピーされます。
コピー元セル範囲.Copy

ただしこの場合はその後Pasteを実行する必要が出てしまいますし、
その間にユーザーが偶然Ctrl+CやVを押すとマクロが誤作動を起こします。
コピー元セル範囲.Copy ' ここでユーザーがCtrl+CやCtrl+Vを押した場合はバグになる wsコピー先シート.Paste コピー先セル ' ↑ペーストまでマクロでやるならこれ(後述) Application.CopyCutMode = False ' ↑画像の点線(コピーモード)をキャンセルする必要も出る
原則は行先セル(引数Destination)を省略せずに運用してください。
形式を選択して貼り付ける - Range.PasteSpecial
「値のみ」「書式のみ」など形式を選択して貼り付ける場合は、
RangeオブジェクトのPasteSpecialメソッドを使用します。
Dim コピー元セル範囲 As Range Set コピー元セル範囲 = ThisWorkbook.Worksheets("Sheet1").Range("A1:C3") Dim コピー先セル As Range Set コピー先セル = ThisWorkbook.Worksheets("Sheet2").Range("E1") ' 値だけ貼り付け コピー元セル範囲.Copy コピー先セル.PasteSpecial xlPasteValues ' コピー状態を解除 Application.CutCopyMode = False
この場合はCopyメソッドの行先Destination引数は使用できませんので、
2行に分けてPasteSpecialメソッドを実行する必要があります。
この詳しい解説についてはこちらの記事をご覧ください。
www.limecode.jp
セルを切り取って移動する - Range.Cut
基本構文
切り取り元セル範囲.Cut 移動先セル ' ※ 引数名を明記 切り取り元セル範囲.Cut Destination:=移動先セル
サンプルコード
Dim 切り取り元セル範囲 As Range Set 切り取り元セル範囲 = ThisWorkbook.Worksheets("Sheet1").Range("A1:C3") Dim 移動先セル As Range Set 移動先セル = ThisWorkbook.Worksheets("Sheet2").Range("E1") ' セル範囲を切り取って移動 切り取り元セル範囲.Cut 移動先セル ' 変数を利用せず直接指定 ThisWorkbook.Worksheets("Sheet1").Range("A1:C3").Cut _ ThisWorkbook.Worksheets("Sheet2").Range("E1")
解説
セルを切り取って移動するには、
RangeオブジェクトのCutメソッドを使用します。
Copyメソッドと同じく引数Destinationを指定でき、
セルの切り取りと移動を同時に実行してくれます。
移動先には左上のセルだけを指定すればOKで、
例のようにA1:C3をE1へ移動するとE1:G3へペーストされます。
元のA1:C3からはセルの内容が削除されるため、
コピーではなく移動になる点がCopyメソッドとの違いです。
おまけ:Pasteメソッドについて
ここまで解説した通り、
Copy・Cutメソッドでは引数Destinationにペースト先を指定できます。
そのため、セル同士を普通にコピー・移動するだけであれば、
Pasteメソッドを使用する必要はありません。
一応Pasteメソッドについても触れておくと、
まず前提としてRangeオブジェクトにはPasteメソッドはありません。
(上記の通りPasteSpecialメソッドは存在します)
通常のPasteメソッドを持っているのは、
RangeではなくWorksheetオブジェクトになります。
ThisWorkbook.Worksheets("Sheet1").Range("A1:C3").Copy ThisWorkbook.Worksheets("Sheet2").Paste ThisWorkbook.Worksheets("Sheet2").Range("E1")
見ての通りかなりコードが冗長な上に、
前述の通り偶然ユーザーがCtrl+CやCtrl+Vを押してしまうと不具合になります。
よほどのことがなければPasteメソッドは使用せず、
素直にCopy/Cutメソッドの引数「Destination」を使用してください。