Home » ExcelVBA Rangeオブジェクト » VBAでシートを切り替えずに値を貼り付ける

VBAでシートを切り替えずに値を貼り付ける

動作検証バージョン:Windows版Excel(バージョン1811 ビルド11029.20108)

アクティブシートを切り替えずに、セルを複製する方法を、拙著『いちばんやさしいExcel VBAの教本』のLesson 73「複数シートをまとめるマクロの速度を上げる書き方を学習しましょう」や、このサイトの記事でご紹介しています。

これに似た、
「マクロ 別シートの値を貼り付けする」
「エクセルマクロ シートをアクティブにせずに値のみ貼り付け」
といった検索でも、割とアクセスがあります。

[スポンサードリンク]

代入でセルの値を複製するサンプルマクロ

「値を貼り付けする」
「値のみ貼り付け」
といったキーワードからは、Excel上でヒトが行う操作をイメージしているように感じますが、本当に値の貼り付けだけを行いたいのなら、代入でいいのではないかと感じます。
Sub 別シートの値を代入で複製する()
 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プロシージャです。
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 » ExcelVBA Rangeオブジェクト » VBAでシートを切り替えずに値を貼り付ける

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

検索


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

.