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

こちらで公開されている、100本ノックに挑戦。
www.excel-ubara.com
素晴らしい教材を公開いただき、ありがとうございます。

上記リンク先から、問題文を転載。
f:id:Infoment:20220106224207p:plain

前回は「書式」「数式」ともにコピーだったが、今回は数式を消して
値をコピーする。

ということで、作成した解答がこちら。

Sub VBA_100Knock_002()
    Sheet1.Range("A1", "C5").Copy
    Sheet2.Range("A1", "C5").PasteSpecial xlPasteFormats
    Sheet2.Range("A1", "C5").Value = Sheet1.Range("A1", "C5").Value
    Application.CutCopyMode = False
End Sub

前回は xlPasteAll で全ての情報を張り付けたが、今回は xlPasteFormats で書式
のみを張り付けている。

なお、変数に格納してから作業するなら、こんな感じか。

Sub VBA_100Knock_002()
    ' コピー元。
    Dim SourceRange As Range
    Set SourceRange = Sheet1.Range("A1", "C5")
    ' コピー先。
    Dim DestinationRange As Range
    Set DestinationRange = Sheet2.Range("A1", "C5")
    
    ' 書式のコピーと貼り付け。
        SourceRange.Copy
        DestinationRange.PasteSpecial xlPasteFormats
    
    ' 値の貼り付け。
        DestinationRange.Value = SourceRange.Value
        
        Application.CutCopyMode = False
End Sub

さらに汎用性を持たせるなら、こんな感じかな。

Sub Test_100Knock_002()
    Call VBA_100Knock_002(Sheet1.Range("A1", "C5"), _
                          Sheet2.Range("A1", "C5"))
End Sub
Sub VBA_100Knock_002(source_range As Range, _
                     destination_range As Range)
    ' 書式のコピーと貼り付け。
        source_range.Copy
        destination_range.PasteSpecial xlPasteFormats
    
    ' 値の貼り付け。
        destination_range.Value = source_range.Value
        
        Application.CutCopyMode = False
End Sub

解答を実行した結果がこちら。
f:id:Infoment:20220106225905g:plain

※冒頭リンク先の解答例および解説も、ぜひご一読ください。

参考まで。