セルのコピー
セルの値を別のセルにコピーしたい場合、一番簡単なのは、
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 を使います。