Range,Cellsの組み合わせでシート指定

行を変数にして列範囲のRangeオブジェクトを取得する時の間違いです。
セル参照するプロパティのシート指定は同一でなければなりません。 RangeプロパティとCellsプロパティを組み合わせて、行や列を変数にしてセル範囲を指定する方法です。
Range(Cells(GYO1, COL1), Cells(GYO2, COL2))という書き方で、 Cellsプロパティが指定しているセルを左上、右下としてのセル範囲のRangeオブジェクトが取得できますが、 この時にシートを明示しようとする時の間違いです。



Worksheets("Sheet1").Range("A1:D3")という書き方はよく目にします。
これにならって、RangeプロパティとCellsプロパティを組み合わせてセル範囲を指定する時の書き方です。

    Dim GYO1 As Long, GYO2 As Long, COL1 As Long, COL2 As Long
    GYO1 = 1: COL1 = 1              ' A1セル位置
    GYO2 = 3: COL2 = 4              ' D3セル位置
    Range(Cells(GYO1, COL1), Cells(GYO2, COL2)).Value = 1
これなら、(アクティブなシート上での動作だけなので)問題ありませんが、

    Dim GYO1 As Long, GYO2 As Long, COL1 As Long, COL2 As Long
    GYO1 = 1: COL1 = 1              ' A1セル位置
    GYO2 = 3: COL2 = 4              ' D3セル位置
    With Worksheets("Sheet1")
      .Range(Cells(GYO1, COL1), Cells(GYO2, COL2)).Value = 1
    End With
このコードは、「Sheet1」がアクティブなシートなら動作しますが、そうでないと実行時エラーになります。
コードを見て誤りは判りますか?

これは、初歩的なミスですが、エラーになった段階ででも問題を見つけられるようにして下さい。

    Range(Cells(GYO1, COL1), Cells(GYO2, COL2)).Value = 1
シートを明示しないRangeプロパティとCellsプロパティは、標準モジュールならアクティブなシート、シートモジュールならそのシートで作用します。
ですが、この書き方では、RangeプロパティとCellsプロパティの両方が同じシートを指していないとオブジェクトが取得できません。
では、先ほどの、

    With Worksheets("Sheet1")
      .Range(Cells(GYO1, COL1), Cells(GYO2, COL2)).Value = 1
    End With
この書き方は、Rangeプロパティは「Sheet1」を明示していますが、Cellsプロパティには前の「.」が付いていないため、 実行段階で違うシートを指してしまうことが起こり得るわけです。
正しくは、

    With Worksheets("Sheet1")
      .Range(.Cells(GYO1, COL1), .Cells(GYO2, COL2)).Value = 1
    End With
と、RangeプロパティとCellsプロパティ(2箇所)ともに同じシートを明示するようにして下さい。
このサンプルでは、画面の横幅の関係でWithステートメントを書いていますが、「Worksheets("Sheet1")」をそれぞれの「.」の前に書いても同じです。
また、シートをオブジェクト変数に取得して処理する場合は、

    Dim SH As Worksheet
    Dim GYO1 As Long, GYO2 As Long, COL1 As Long, COL2 As Long
    GYO1 = 1: COL1 = 1              ' A1セル位置
    GYO2 = 3: COL2 = 4              ' D3セル位置
    Set SH = Worksheets("Sheet1")
    SH.Range(SH.Cells(GYO1, COL1), SH.Cells(GYO2, COL2)).Value = 1
という書き方になります。 このようにセル範囲を左上、右下のセル位置を特定した矩形で扱うことができますが、この他に、

    Dim SH As Worksheet
    Dim GYO1 As Long, COL1 As Long
    GYO1 = 1: COL1 = 1              ' A1セル位置
    Set SH = Worksheets("Sheet1")
    SH.Cells(GYO1, COL1).Resize(3, 4).Value = 1
という書き方もあります。これは左上起点だけを指して、行方向、列方向の範囲を指定する方法で、上記と同じ処理結果になります。
変数を少なくできるので多用する方が多いようですが、ループ内でResizeプロパティやOffsetプロパティを頻繁に発行する方法は、「転記の記述方法による処理時間の比較」の説明の通りRangeプロパティとCellsプロパティを組み合わせる方法の方が処理時間が短縮できるようです。