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")※セル範囲のコピーの場合は、上記のように、コピー先は始点のみを記述すれば良いです。
<実行結果>


 
  
  
  
  


コメント