0

各 for ループで変数の開始点と終了点を使用してコピーする特定の範囲を選択する必要があるため、Range(Cells(x,x), Cells(y,y).Select メソッドを使用しました。これにより、エラーが発生します。

For i = 1 To 40
        Worksheets("BloombergData").Select
        Worksheets("BloombergData").Range(Cells(5, 2 + 11 * (i - 1)), Cells(4 + Worksheets("Lookup").Cells(i + 1, 3).Value, 11 + 11 * (i - 1))).Select
        Selection.Copy
        Worksheets("Data_Rearranged").Range(Cells(6 + Worksheets("Lookup").Cells(i, 3).Value, 4), Cells(5 + Worksheets("Lookup").Cells(i + 1, 3).Value, Data_Columns + 3)).Select
        Selection.Paste
    Next i

セル関数に入る内容を単純化しても、まだ機能しませんでした。これをテストしてみましたが、同じエラーが発生しました:

Worksheets("BloombergData").Range(Cells(1, 1), Cells(2, 1)).Select
Selection.Copy

Range("A1") など、実際のセルを Range に入れた場合にのみ機能しました

しかし、私の範囲は可変なので、可変範囲を選択する方法を見つける必要があります。

助けてください?

4

1 に答える 1

1

エラーが発生することは明らかです。Cells オブジェクトは完全に修飾されていません。以下のコードの Cells オブジェクトの前にある DOT に注意してください。

2 + 11 * (i - 1)ところで、私は何を評価するかをテストしていません。したがって、 が許容できない数値に評価されると、コードは再び失敗します。

Sub Sample()
    Dim ws As Worksheet

    Set ws = ThisWorkbook.Worksheets("BloombergData")

    With ws
        For i = 1 To 40
            .Range(.Cells(5, 2 + 11 * (i - 1)), .Cells(4 + Worksheets("Lookup").Cells(i + 1, 3).Value, 11 + 11 * (i - 1))).Copy
            '
            '~~> Rest of the code
            '
        Next
    End With
End Sub

興味深い読み物

理解を容易にするために、コードをこれに分解することもできます。後でデバッグするのが簡単になります:)

Sub Sample()
    Dim ws As Worksheet
    Dim r1 As Long, c1 As Long
    Dim r2 As Long, c2 As Long

    Set ws = ThisWorkbook.Worksheets("BloombergData")

    With ws
        For i = 1 To 40
            r1 = 5
            c1 = 2 + 11 * (i - 1)

            r2 = 4 + Worksheets("Lookup").Cells(i + 1, 3).Value
            c2 = 11 + 11 * (i - 1)

            .Range(.Cells(r1, c1), .Cells(r2, c2)).Copy

            '
            '~~> Rest of the code
            '
        Next
    End With
End Sub
于 2013-11-08T10:04:25.603 に答える