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