「vba range copy シートをアクティブにせずに」
という検索キーワードに気づきました。
セルをコピーして、別シートへの貼り付けを行う際に、アクティブシートを切り替えずに行うVBAのコードを探していた方による検索です。
複製先を指定するRange.Copyメソッドの引数・Destination
「vba range copy シートをアクティブにせずに」と検索なさった方は、貼り付けをするときに、WorksheetオブジェクトのPasteメソッドか、RangeオブジェクトのPasteSpecialメソッドを使ってらっしゃるのでしょうから、まずは以下のSubプロシージャを確認しましょう。
Range("A1").Copy Destination:=Range("A10")
End Sub
上記のプロシージャを実行すると、アクティブシートのA1セルが、A10セルにコピー&貼り付けされます。
マクロ記録ではこのタイプのコードは作られませんが、RangeオブジェクトのCopyメソッドは、貼り付け先を引数で指定することができます。
Excel VBAの経験が多少あっても、このことをご存知ない方が、意外といらっしゃるように感じますので、引数は1個だけですが、標準引数で、
Range("A1").Copy Range("A10")
とするよりも、上記プロシージャのように、引数名・Destinationを書いて、
Range("A1").Copy Destination:=Range("A10")
と書いておくのが、私は好みです。
アクティブシートから別のシートへセルの複製を行うサンプルマクロ
以下のSubプロシージャを実行すると、アクティブなシートのA1セルがコピーされ、OTHERシートのA1セルに貼り付けられます。
このときにアクティブシートは切り替わりません。Range("A1").Copy _
Destination:=Sheets("OTHER").Range("A1")
End Sub
指定する引数・Destinationに指定する貼り付け先のオブジェクト式を、Rangeオブジェクトの上位オブジェクトであるWorksheetオブジェクトを取得する式から書けば、アクティブシートを切り替えることなく、セルを複製できます。
別のシートへセルの複製を行うサンプルマクロ
以下のSubプロシージャならば、どのシートがアクティブであるかに関わらず、SheetAシートのA1セルがコピーされ、SheetBシートのB1セルに貼り付けられます。Sheets("SheetA").Range("A1").Copy _
Destination:=Sheets("SheetB").Range("B1")
End Sub
Range.Copyメソッドを、Worksheetオブジェクトを指定する式から書けば、どのシートがアクティブであるか関係なくセルの複製ができます。
最終更新日時:2019-01-20 09:39
- Newer:VBAでデータテーブルを非表示に-HasDataTableプロパティ
- Older:VBAでデータ系列を追加する
Home » Excel VBA Rangeオブジェクト » VBAで別シートへのセルコピーをアクティブシートの切り替えを行わずに