Excel&VBA解説サイト「エクセルの神髄」様出題の問題集、
「VBA100本ノック」に対する私の回答と解説のページです。
100本ノックの出題リストはこちらから
excel-ubara.com
出題:セルのコピー
#VBA100本ノック 2本目
「Sheet1」のA1:C5のセル範囲を、「Sheet2」のA1:C5にコピーしてください。
数式は消して値でコピー、書式もコピーしてください。
※書式は「セルの書式設定」で設定可能なもの(ロックは除く)。
入力規則やメモ(旧コメント)は書式ではありません。
「ふりがな」は任意で

◇ 出題ページはこちら
ソースコード
' 100本ノック002:セルのコピー Sub 値と書式のみコピーする() Worksheets("Sheet1").Range("A1:C5").Copy Worksheets("Sheet2").Range("A1").PasteSpecial Paste:=xlPasteFormats Worksheets("Sheet2").Range("A1").PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End Sub
解説
値と書式をコピーするという実務でよくある問題でした。
値だけならRange.Value = Range.Valueの方が高速なのですが、
書式となると結局Copyメソッドを使わざるを得ません。
どのみちクリップボードを介すことになるなら、
値と書式の両方をPasteSpecialメソッドで実行してよさそうです。
Copyメソッドを使用するとコピー中を表す点線が残ってしまうので、
CutCopyModeをFalseにするのを忘れないようにしてください。