セル範囲の転記操作

「転記」が「コピー」→「貼り付け」ではなく、「左辺=右辺」の1行で済むことが解ったので、これを複数のセル(セル範囲)に適用してみましょう。

今回の題材の転記範囲は12セルですから、前項「単一セルの転記操作」12(12)書けば転記できるのは誰でも解ります。


Option Explicit

Sub TEST3()
    Worksheets("Sheet2").Range("A1").Value = Worksheets("Sheet1").Range("A1").Value
    Worksheets("Sheet2").Range("A2").Value = Worksheets("Sheet1").Range("A2").Value
    Worksheets("Sheet2").Range("A3").Value = Worksheets("Sheet1").Range("A3").Value
    Worksheets("Sheet2").Range("B1").Value = Worksheets("Sheet1").Range("B1").Value
    Worksheets("Sheet2").Range("B2").Value = Worksheets("Sheet1").Range("B2").Value
    Worksheets("Sheet2").Range("B3").Value = Worksheets("Sheet1").Range("B3").Value
    Worksheets("Sheet2").Range("C1").Value = Worksheets("Sheet1").Range("C1").Value
    Worksheets("Sheet2").Range("C2").Value = Worksheets("Sheet1").Range("C2").Value
    Worksheets("Sheet2").Range("C3").Value = Worksheets("Sheet1").Range("C3").Value
    Worksheets("Sheet2").Range("D1").Value = Worksheets("Sheet1").Range("D1").Value
    Worksheets("Sheet2").Range("D2").Value = Worksheets("Sheet1").Range("D2").Value
    Worksheets("Sheet2").Range("D3").Value = Worksheets("Sheet1").Range("D3").Value
End Sub

ですが、転記するセルがもっと多かったらどうしますか?
※但し、これではワークブックは明示されていません。「自分のブックはどれ?」を参照して下さい。

1つには、同じ行数・列数での転記の場合は、計算式が1行でセットできたのと同じように、セル範囲を指定して1回で転記できます。


Option Explicit

Sub TEST4()
    Worksheets("Sheet2").Range("A1:D3").Value = Worksheets("Sheet1").Range("A1:D3").Value
End Sub
もうお解りのように、自動記録のようにシートやセル範囲を選択することもないし、コピー・貼り付けもありません。

1行下、1列右にズラせるなら、


Option Explicit

Sub TEST4()
    Worksheets("Sheet2").Range("B2:E4").Value = Worksheets("Sheet1").Range("A1:D3").Value
End Sub

このようになります。
なお、転記先が転記元と行数・列数が一致しないと、エラーになるか、少ない範囲で転記されることになります。

さて、マクロが1行に収まらなくなりそうなこともあり、この先の説明にも都合が悪いので、この辺でシートについては一旦オブジェクト変数に格納して、直接「Worksheets("Sheet1")」のように毎回書くのはやめることにしましょう。


Option Explicit

Sub TEST4()
    Dim objSh1 As Worksheet                                         ' Sheet1
    Dim objSh2 As Worksheet                                         ' Sheet2
    Set objSh1 = Worksheets("Sheet1")
    Set objSh2 = Worksheets("Sheet2")
    objSh2.Range("B2:E4").Value = objSh1.Range("A1:D3").Value
End Sub

このように、見やすくなります。
このサンプルでは、オブジェクト変数を使ったところで1回しか参照しないので意味がありませんが、先ほどの12行の場合などは無意味ではなくなります。