HOME > 即効テクニック > Excel VBA > セル操作関連のテクニック > セルをコピーする(Copyメソッド)

セルをコピーする(Copyメソッド)|Excel VBA

セル操作関連のテクニック

セルをコピーする(Copyメソッド)

(Excel 2000/2002/2003/2007/2010)

RangeオブジェクトのCopyメソッドは、指定したセル範囲をコピーします。

構文 Object.Copy(Destination) 
設定項目 内容
Object Rangeオブジェクト
Destination 貼り付け先のセル範囲を表すRangeオブジェクト [省略可能]

引数Destinationを省略した場合は、コピーモードになります。
コピーモードを解除したり、別のデータがクリップボードにコピーされるまで、何度でも貼り付け可能です。

引数Destinationを指定すると、クリップボードのコピーとペーストの機能を利用して、指定したセル範囲にデータが貼り付けられます。
実行後は、クリップボードは空になり、コピーモードにはなりません。

Excelでクリップボードが利用される際は、内容自体のコピーはペースト時まで保留されます。ペースト時になって初めてコピー&ペーストされるので、ペースト時のセル範囲の内容が有効になります。

また、コピーモードのままコピー元のブックを閉じたり、Excelを終了したりすると、終了前にその時点のデータがクリップボードにコピーされます。ただし、これをExcelにペーストした場合は、書式なしで貼り付けられます。

思わぬ結果にならないよう、コピーした後のペースト処理は速やかに行うと良いでしょう。

Sub Sample()
    Worksheets("Sheet1").Range("A1:B9").Copy _
        Destination:=Worksheets("Sheet2").Range("B1")
End Sub

Sampleは、Sheet1のセルA1:B9をSheet2のB1を先頭とするセル範囲にコピーします。
貼り付け先にデータが入っていても上書きします。
背景色や表示形式などの書式もすべてコピーしますが、セル範囲を対象とした場合は列幅・行の高さはコピーされません。
列幅もコピーしたい場合には列全体を対象にして行ってください。行の高さも同じです。
あるいはSpacialPasteメソッドを使用して、列幅のみをコピーしてもよいでしょう。

●注意●

コピー元のセル範囲と貼り付け先のセル範囲の形が違うと、エラーが発生することがあります。エラー発生の条件はマニュアル操作でコピーするときと同じです。

●補足●

バージョン2000以降のOfficeには、Officeクリップボードの機能があります。
Windows標準のクリップボードは1つのデータしか保持しておけないのに対し、Officeクリップボードには複数のデータを保持できるので、前にさかのぼって利用できます。このOfficeクリップボード内のデータは、HTML形式でコピーされています。
Officeアプリケーションだけでなく、他のアプリケーションでコピー/カットしたデータも保持されますが、引数Destinationを指定してCopyメソッドを実行した場合は、Officeクリップボードには保持されません。
また、VBAでOfficeクリップボードを操作するオブジェクトは用意されていないので、VBAから直接操作はできません。