Home » ExcelVBA Rangeオブジェクト » VBAで別シートへのセルコピーをアクティブシートの切り替えを行わずに

VBAで別シートへのセルコピーをアクティブシートの切り替えを行わずに

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

「vba range copy シートをアクティブにせずに」
という検索キーワードに気づきました。

セルをコピーして、別シートへの貼り付けを行う際に、アクティブシートを切り替えずに行うVBAのコードを探していた方による検索です。

[スポンサードリンク]

複製先を指定するRange.Copyメソッドの引数・Destination

「vba range copy シートをアクティブにせずに」
と検索なさった方は、貼り付けをするときに、WorksheetオブジェクトのPasteメソッドか、RangeオブジェクトのPasteSpecialメソッドを使ってらっしゃるのでしょうから、まずは以下のSubプロシージャを確認しましょう。
Sub セルのコピペを行う()
 Range("A1").Copy Destination:=Range("A10")
End Sub

上記のプロシージャを実行すると、アクティブシートのA1セルが、A10セルにコピー&貼り付けされます。

マクロ記録ではこのタイプのコードは作られませんが、RangeオブジェクトのCopyメソッドは、貼り付け先を引数で指定することができます。

VBAで別シートへのセルコピーをアクティブシートの切り替えを行わずに

Excel VBAの経験が多少あっても、このことをご存知ない方が、意外といらっしゃるように感じますので、引数は1個だけですが、標準引数で、
  Range("A1").Copy Range("A10")
とするよりも、上記プロシージャのように、引数名・Destinationを書いて、
  Range("A1").Copy Destination:=Range("A10")
と書いておくのが、私は好みです。

アクティブシートから別のシートへセルの複製を行うサンプルマクロ

以下のSubプロシージャを実行すると、アクティブなシートのA1セルがコピーされ、OTHERシートのA1セルに貼り付けられます。

このときにアクティブシートは切り替わりません。
Sub 別のシートにコピペする1()
 Range("A1").Copy _
   Destination:=Sheets("OTHER").Range("A1")
End Sub

指定する引数・Destinationに指定する貼り付け先のオブジェクト式を、Rangeオブジェクトの上位オブジェクトであるWorksheetオブジェクトを取得する式から書けば、アクティブシートを切り替えることなく、セルを複製できます。

別のシートへセルの複製を行うサンプルマクロ

以下のSubプロシージャならば、どのシートがアクティブであるかに関わらず、SheetAシートのA1セルがコピーされ、SheetBシートのB1セルに貼り付けられます。
Sub 別のシートにコピペする2()
 Sheets("SheetA").Range("A1").Copy _
   Destination:=Sheets("SheetB").Range("B1")
End Sub

Range.Copyメソッドを、Worksheetオブジェクトを指定する式から書けば、どのシートがアクティブであるか関係なくセルの複製ができます。

最終更新日時:2019-01-20 09:39

[スポンサードリンク]

Home » ExcelVBA Rangeオブジェクト » VBAで別シートへのセルコピーをアクティブシートの切り替えを行わずに

「ExcelVBA Rangeオブジェクト」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.