和風スパゲティのレシピ

日本語でコーディングするExcelVBA

2本目:セルのコピー

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にするのを忘れないようにしてください。