セルをコピーする(Copyメソッド)|Excel VBA |
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から直接操作はできません。