VBA100本ノック 2本目:セルのコピー
こちらで公開されている、100本ノックに挑戦。
www.excel-ubara.com
素晴らしい教材を公開いただき、ありがとうございます。
上記リンク先から、問題文を転載。
前回は「書式」「数式」ともにコピーだったが、今回は数式を消して
値をコピーする。
ということで、作成した解答がこちら。
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
解答を実行した結果がこちら。
※冒頭リンク先の解答例および解説も、ぜひご一読ください。
参考まで。