アクティブシートを切り替えずに、セルを複製する方法を、拙著『いちばんやさしいExcel VBAの教本』のLesson 73「複数シートをまとめるマクロの速度を上げる書き方を学習しましょう」や、このサイトの記事でご紹介しています。
これに似た、
「マクロ 別シートの値を貼り付けする」
「エクセルマクロ シートをアクティブにせずに値のみ貼り付け」
といった検索でも、割とアクセスがあります。
代入でセルの値を複製するサンプルマクロ
「値を貼り付けする」「値のみ貼り付け」
といったキーワードからは、Excel上でヒトが行う操作をイメージしているように感じますが、本当に値の貼り付けだけを行いたいのなら、代入でいいのではないかと感じます。
Sheets("コピー先").Range("A1:C2").Value = _
Sheets("元データ").Range("A1:C2").Value
End Sub
上記のSubプロシージャを実行すると、
代入文の右辺に指定された元データシートのA1:C2セルの値が、
Sheets("コピー先").Range("A1:C2").Value = _
Sheets("元データ").Range("A1:C2").Value
代入文の左辺に指定されたコピー先シートのA1:C2セルに複製されます。
Sheets("コピー先").Range("A1:C2").Value = _
Sheets("元データ").Range("A1:C2").Value
代入で値の複製を行う場合には、元のセル範囲と、値の複製先セル範囲を同じにしなければならないのが、難点といえば難点でしょうか。
Sheets("コピー先").Range("A1:C2").Value = _
Sheets("元データ").Range("A1:C2").Value
PasteSpecialメソッドxlPasteValuesで値の貼り付けを行うサンプルマクロ
ヒトがExcelで行うように、コピー実行後に値貼り付けをするなら、以下のようなSubプロシージャです。Sheets("元データ").Range("A1:C2").Copy
Sheets("コピー先").Range("A1").PasteSpecial xlPasteValues
End Sub
拙著のLesson 62「Rangeオブジェクトのメソッドについて学習しましょう」でもお伝えしている、Rangeオブジェクトに用意されているPasteSpecialメソッドの引数に定数xlPasteValuesを指定すると、値を貼り付けることができます。
Sheets("コピー先").Range("A1").PasteSpecial xlPasteValues
RangeオブジェクトのCopyメソッドによるコピー元の指定時、値の貼り付けの指定時ともに、ワークシートを取得するコードから書くことで、
Sheets("元データ").Range("A1:C2").Copy
Sheets("コピー先").Range("A1").PasteSpecial xlPasteValues
シートを切り替えずに、値の貼り付けができます。
先にご紹介した代入と違って、値の貼り付け先は左上のセル1つを指定するだけで済むのが利点といえるかもしれません。
Sheets("コピー先").Range("A1").PasteSpecial xlPasteValues
最終更新日時:2019-01-20 09:38
Home » Excel VBA Rangeオブジェクト » VBAでシートを切り替えずに値を貼り付ける