セルの値をほかのセルにコピーするには「Copyメソッド」と「Pasteメソッド」を使います。
つまり、「Copyメソッド」でセルの内容をクリップボードにコピーし、「Pasteメソッド」でクリップボードの内容をセルに貼り付けます。

この表をコピーして、9行目に貼り付けるマクロです。
Sub コピペ_01()
Range(“B2:D6”).Copy ‘①
Range(“B9”).Select ‘②
ActiveSheet.Paste ‘③
Application.CutCopyMode = False ‘④
End Sub
① 表をクリップボードにコピーします。
② 貼り付け先の先頭のセルを選択します。
③ クリップボードの内容を貼り付けます。
④ コピーモードを解除します。
結果は

ペースト(貼り付け)が②と③の2行になっています。
Range(“B9”).Paste
でもよさそうですが、このようにするとエラーになります。
Pasteメソッドは Worksheet オブジェクトを対象としているため、セルへの直接の貼り付けはできないためです。
今度は同表を右側のセル F2 に貼り付けることにします。
Sub コピペ_02()
Range(“B2:D6”).Copy
Range(“F2”).Select ‘①
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub
結果は

内容のコピペはできていますが、列幅が反映されていません。
貼り付ける形式を含めて貼り付けるには「PasteSpecialメソッド」を使います。
Sub コピペ_3()
Range(“B2:D6”).Copy
Range(“F2”).PasteSpecial Paste:= _
xlPasteColumnWidths ‘①
Range(“F2”).PasteSpecial Paste:= _
xlPasteAll ‘②
Application.CutCopyMode = False
End Sub
① 列幅をペーストします。
② 列幅を除くすべての規定値(値や書式等)をペーストします。
※ ①と②は順番が入れ替わっても結果は同じです。
よって結果は

更に今度は Sheet1にあるこの表を、Sheet2の同じセル B2を先頭に貼り付けるマクロです。
Sub コピペ_03()
Range(“B2:D6”).Copy ‘①
Sheets(“Sheet2”).Select ‘②
Range(“B2”).PasteSpecial Paste:=xlPasteColumnWidths ‘③
Range(“B2”).PasteSpecial Paste:=xlPasteAll ‘④
Application.CutCopyMode = False
End Sub
① Sheets(“Sheet1”).Range(“B2:D6”).Copy
Sheet1がアクティブの状態であれば「Sheets(“Sheet1”).」が省略できます。
② Sheet2 を選択します(アクティブ)。
③④ で列幅を含めすべて貼り付けます。
Sheet2 をアクティブにする以外、基本的に何も変わりません。
貼り付ける内容(PasteSpecialの引数)
定数 | 内容 |
xlPasteAll | すべて(規定値) |
xlPasteAllExceptBorders | 罫線を除くすべて |
xlPasteColumnWidths | 列幅 |
xlPasteComments | コメント |
xlPasteFormats | 書式 |
xlPasteFormulas | 数式 |
xlPasteFormulasAndNumberFormats | 数式と数値の書式 |
xlPasteValidation | 入力規則 |
xlPasteValues | 値 |
xlPasteValuesAndNumberFormats | 値と数値の書式 |
今までは「Copyメソッド」で一旦クリップボードにコピーして、それを貼り付けていました。
今から別途、クリップボードを経由しないでコピペする方法を解説します。
Copyメソッドに引数「Destination」を使って貼り付け先を指定する方法です。
これにより、クリップボードを経由することなく直接コピペすることができます。
Sub コピペ_04()
Range(“B2:D6”).Copy Destination:=Range(“B8”)
End Sub


