エクセルVBA100本ノック。2本目:セルのコピー2

この記事から得るもの

セルのコピペ後の、値貼り付け、書式は元のをそのまま使う方法が分かる。


1 今回のお題

「Sheet1」のA1:C5のセル範囲を、「Sheet2」のA1:C5にコピーしてください。
数式は消して値でコピー、書式もコピーしてください。
※書式は「セルの書式設定」で設定可能なもの(ロックは除く)。
入力規則やメモ(旧コメント)は書式ではありません。
「ふりがな」は任意で

2 今回のお題の意図

セルの中には数式を埋め込まれているものがたくさんありますよね。表計算と言うくらいですからね。
よくあるパターンで、計算した結果(値)をコピーしたいというシチュエーションはたくさんありますね。つまり、知っておいて当たり前の記述レベルなのでしょう。

3 回答

Sub コピペ()

Worksheets("sheet1").Range("A1:C5").Copy

Worksheets("sheet2").Range("A1").PasteSpecial Paste:=xlPasteValues
Worksheets("Sheet2").Range("A1").PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False

End Sub

値と、書式をPasteできます。しかしこの書き方ってスマートではないですよね。
Worksheets("Sheet2").Range("A1")に対する処理がかぶっておる(;^ω^)

なのでWithでまとめてあげましょう!

Sub コピペ2()

Worksheets("sheet1").Range("A1:C5").Copy

With Worksheets("sheet2").Range("A1")
    .PasteSpecial Paste:=xlPasteValues
    .PasteSpecial Paste:=xlPasteFormats
End With

Application.CutCopyMode = False

End Sub

この書き方の利点は、他のPaste方法の追加に対応したい場合に可読性が高いことにあります。さすがは、吉田拳先生の回答ですね。

4 感想

VBAは8年ほど使っているのですが、本当に基本的な部分の理解をちゃんとできてないことを痛感しております。
また、他の人のコードを見れるので、非常に参考になります。ぼちぼち続けていきます。しかし問題考えるのも大変そうだ(^▽^;)