セル範囲が不定(可変)の場合は

さて、題材は3行×4列固定の転記でしたが、これだけでは応用が効きませんね。同じ範囲の転記でもいろいろな書き方があります。
転記範囲の左上と右下の位置を番号で指定する方法

Option Explicit

Sub TEST5()
    Dim objSh1 As Worksheet                                         ' Sheet1
    Dim objSh2 As Worksheet                                         ' Sheet2
    Set objSh1 = Worksheets("Sheet1")
    Set objSh2 = Worksheets("Sheet2")
    ' 1行1列ズラせて転記
    objSh2.Range(objSh2.Cells(2, 2), objSh2.Cells(4, 5)).Value = _
        objSh1.Range(objSh1.Cells(1, 1), objSh1.Cells(3, 4)).Value
End Sub
Rangeオブジェクトは、カッコ内にセル範囲を示す文字列を指定する他、Cellsプロパティを併用してセル範囲の左上セル、右下セルを指定させて矩形のセル範囲とすることができます。
シートオブジェクトを明示する場合は、Range,Cellsともに同じものを記述する必要があります。

左上起点で行数、列数を指定する方法

Option Explicit

Sub TEST5()
    Dim objSh1 As Worksheet                                         ' Sheet1
    Dim objSh2 As Worksheet                                         ' Sheet2
    Set objSh1 = Worksheets("Sheet1")
    Set objSh2 = Worksheets("Sheet2")
    objSh2.Range("B2").Resize(3, 4).Value = objSh1.Range("A1").Resize(3, 4).Value
End Sub

Sub TEST6()
    Dim objSh1 As Worksheet                                         ' Sheet1
    Dim objSh2 As Worksheet                                         ' Sheet2
    Set objSh1 = Worksheets("Sheet1")
    Set objSh2 = Worksheets("Sheet2")
    objSh2.Cells(2, 2).Resize(3, 4).Value = objSh1.Cells(1, 1).Resize(3, 4).Value
End Sub
転記元、転記先ともにCellsプロパティで1セルだけを指定した状態でResizeプロパティで行方向に「3」、列方向に「4」のサイズにセル範囲を取り直すイメージです。この時、Cellsプロパティで指定した左上のセル位置は固定され、右下方向にセル範囲が取られます。
(TEST5,TEST6は全く同じ結果になります。)

セル範囲は固定し、ズレる分を指定する方法

Option Explicit

Sub TEST5()
    Const cnsRange = "$A$1:$D$3"
    Dim objSh1 As Worksheet                                         ' Sheet1
    Dim objSh2 As Worksheet                                         ' Sheet2
    Set objSh1 = Worksheets("Sheet1")
    Set objSh2 = Worksheets("Sheet2")
    objSh2.Range(cnsRange).Offset(1, 1).Value = objSh1.Range(cnsRange).Value
End Sub
この例では、転記するセル範囲のアドレスを「cnsRange」という定数で宣言して用いています。転記先ではOffsetプロパティを使って11列ズラせて転記しますから、上の2つのサンプルと全く同じ結果とまります。

Sheet1の入力セル範囲全部を指定する方法

Option Explicit

Sub TEST5()
    Dim objSh1 As Worksheet                                         ' Sheet1
    Dim objSh2 As Worksheet                                         ' Sheet2
    Dim objRange As Range                                           ' セル範囲
    Dim strRange As String                                          ' セル範囲アドレス
    Set objSh1 = Worksheets("Sheet1")
    Set objSh2 = Worksheets("Sheet2")
    ' Sheet1の入力範囲を取得
    Set objRange = objSh1.UsedRange
    strRange = objRange.Address
    ' 1行1列ズラせて転記
    objSh2.Range(strRange).Offset(1, 1).Value = objRange.Value
End Sub
今回の題材で動かす限り、結果は上3つのサンプルと同じですが、UsedRangeプロパティはワークシートで使われたセル範囲を返してきますので、その位置から右下に11列ズラせて転記することになります。

転記先の最終行の後ろに追加する方法

Option Explicit

Sub TEST5()
    Dim objSh1 As Worksheet                                         ' Sheet1
    Dim objSh2 As Worksheet                                         ' Sheet2
    Dim lngRow As Long                                              ' 行INDEX
    Set objSh1 = Worksheets("Sheet1")
    Set objSh2 = Worksheets("Sheet2")
    ' Sheet2の最終行を取得
    lngRow = objSh2.Range("$A$" & objSh2.Rows.Count).End(xlUp).Row
    ' 最終行の次行を取得
    If objSh2.Cells(lngRow, 1).Value <> "" Then lngRow = lngRow + 1
    ' 現在の収容位置の下に転記
    objSh2.Cells(lngRow, 1).Resize(3, 4).Value = objSh1.Range("$A$1:$D$3").Value
End Sub
累積処理などへ応用する方法です。
転記済みの最終行を確認して、その下へ転記させます。

※これらの方法を、処理するケースごとに応用して利用して下さい。