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点あります。
- 「.Value」を省略不可
上記の例をご覧の通り、Rangeの後に「.Value」というプロパティが付いています。
単一セルのコピーの場合は「.Value」を省略できるので、わざわざ記述しませんでしたが、セル範囲のコピーの場合は「.Value」の記述が必須です。
「.Value」を省略して以下のように記述すると、全てが無視されて何も起きません。 - コピー先の指定方法
書式を含めたコピーの場合は、コピー先は始点のみを記述すれば良かったですが、値のみコピーする場合は、コピー先の始点だけでなく範囲も指定必須です。
つまり、以下のようなコーディングはNGです。(始点しかコピーされません。)
書式を含めてセルをコピー
この方法は、ワークシート上で、[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")
※セル範囲のコピーの場合は、上記のように、コピー先は始点のみを記述すれば良いです。
<実行結果>

コメント