セルのコピー、行のコピー

中級VBA

セルのコピー

セルの値を別のセルにコピーしたい場合、一番簡単なのは、

Range("A1") = Range("B1")

などとします。ただこれだと日付などは上手くコピーできません。

11月30日 –> 44895   シリアル値がコピーされます。

Range("A2") = Range("B1").Value
Range("A3").Value = Range("B1").Value

などとすれば、日付としてコピーできます。
ただし、それでも書式設定までは上手くコピーできません。

11月30日 –> 2022/11/30  書式設定まではコピーされない

Copyメソッド

 書式設定なども含めてコピーしたい場合は、コピーメソッドを使用します。
一旦Copyとしてクリップボードにコピーし、
PasteSpecial で貼り付けます。
PasteSpecial は、「形式を選択して貼り付け」コマンドのような引数を設定して貼り付ける事も可能です。
 省略した場合は、xlPasteAll を指定したのと同じになります。
 最後にクリップボードの値をクリアしておきます。

Range("B1").Copy
Range("A4").PasteSpecial
Range("A5").PasteSpecial Paste:=xlPasteAll
Application.CutCopyMode = False   ’コピーモード解除

 この例ではクリップボードを介したコピーとなりますが、以下のようにコピーの引数としてセルを渡せば直接コピーすることになります。

Range("B1").Copy Range("A6")

この時、 Range(“A6”).Value とするとエラーとなります。
また、Destinationで引数指定してもOKです。

Range("B1").Copy Destination:=Range("A7")

行のコピー

 行を全てコピーして貼り付けたい場合は、Rowsで行を指定してコピーします。
1行目を2行目にコピーしたい場合は、以下のようにします。

Rows(1).Copy                      '1行目をコピー
Rows(2).PasteSpecial (xlPasteAll) '2行目に貼り付け
Application.CutCopyMode = False   'コピーモードを解除

 行の指定は、.EntireRow を使う事もできます。

Range("A1").EntireRow.Copy
Range("B6").EntireRow.PasteSpecial
Application.CutCopyMode = False   'コピーモードを解除

 Range(“A1”).EntireRow であれば、「A1セルの行」=1行目を指します。

まとめ

 単に文字列や数値などをコピーする場合はセルを代入するようにイコールでコピーできますが、日時のコピーなどでは上手くいかない場合があります。
 書式などもコピーしたい場合は、CopyとPasteSpecialを使う事になります。これはクリップボードを介したコピーとなります。

 コピーメソッドを使った後は、コピーモードを解除するようにしましょう。

 行ごとコピーする場合は、Rows、EntireRow を使います。

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