【Excel VBA】セルのコピー&ペーストの方法

Excel

VBAを使用して、Excelのセルをコピー&ペーストする方法を、説明いたします。

セルの値のみをコピー

書式を含めずに、セルの値のみをコピーする良い場合は、シンプルに以下の記述方法で対応できます。

記述方法

コピー先のセル = コピー元のセル

この方法は、クリップボードを経由せずにコピー&ペーストするため、高速処理が可能です。
VBAでExcelを編集する場合は、セル内の値のみを扱えば良い場合がほとんどだと思いますので、この方法を推奨します。

なお、「マクロの自動記録」を利用して、「コピー → 形式を選択して貼り付け → 値のみ」なんてやると、長ったらしいコードが自動生成されますが、上記のようなシンプルな記述するだけで大丈夫です。

書式を含めたコピー方法も後述しますが、性能低下を招くため、書式を整えたい場合は、値の編集を終えてから、最後にまとめて整形することをお勧めします。

例えば、セル[A1]をセル[A3]にコピーしたい場合は、以下のようになります。

Range("A3") = Range("A1")

Rangeの代わりにCellsを使うことも可能です。

Cells(3, 1) = Cells(1, 1)

シート名を指定して別シートにコピーすることも可能です。

Sheets("Sheet2").Range("A1") = Sheets("Sheet1").Range("A1")

余談ですが、ブック内に複数のシートが存在すると、誤って他のシートを編集してしまうリスクがあるため、普段からシート名を指定するクセをつけておくことをお勧めします。

セル範囲をコピーする場合ですが、例えば、セル[A1]~[C1]を、セル[A3]~[C3]にコピーしたい場合は、以下のようになります。

Range("A3:C3").Value = Range("A1:C1").Value

セル範囲を値のみコピーする場合は、注意点が2点あります。

  1. 「.Value」を省略不可
    上記の例をご覧の通り、Rangeの後に「.Value」というプロパティが付いています。
    単一セルのコピーの場合は「.Value」を省略できるので、わざわざ記述しませんでしたが、セル範囲のコピーの場合は「.Value」の記述が必須です。
    「.Value」を省略して以下のように記述すると、全てが無視されて何も起きません。

    Range(“A3:C3”) = Range(“A1:C1”)

  2. コピー先の指定方法
    書式を含めたコピーの場合は、コピー先は始点のみを記述すれば良かったですが、値のみコピーする場合は、コピー先の始点だけでなく範囲も指定必須です。
    つまり、以下のようなコーディングはNGです。(始点しかコピーされません。)

    Range(“A3”).Value = Range(“A1:C1”).Value

書式を含めてセルをコピー

この方法は、ワークシート上で、[Ctrl]+[C] ⇒ [Ctrl]+[V] を行うのと同じ結果が得られます。
ただし、先ほど述べた通り性能低下を招くため、推奨しません。

記述方法

コピー元のセル.Copy コピー先のセル

「マクロの自動記録」を行うと、もっと長ったらしいコードが自動生成されますが、上記の通り、1行記述するだけで大丈夫です。

例えば、セル[A1]をセル[A3]にコピーしたい場合は、以下のようになります。

Range("A1").Copy Range("A3")

Rangeの代わりにCellsを使うことも可能です。

Cells(1, 1).Copy Cells(3, 1)

シート名を指定して、別シートにコピーすることも可能です。

Sheets("Sheet1").Range("A1").Copy Sheets("Sheet2").Range("A3")

セル範囲をコピーする場合ですが、例えば、セル[A1]~[C1]を、セル[A3]~[C3]にコピーしたい場合は、以下のようになります。

Range("A1:C1").Copy Range("A3")

※セル範囲のコピーの場合は、上記のように、コピー先は始点のみを記述すれば良いです。

<実行結果>

コメント

タイトルとURLをコピーしました