For Eachループの逆順 質問する

For Eachループの逆順 質問する

VB の最も強力な機能の 1 つは、インデックス (ループ) を参照せずにコレクション内のオブジェクトをループする機能ですfor each

コレクションからオブジェクトを削除するだけの場合、非常に便利です。

スプレッドシートの行などの定義済みオブジェクトを削除する場合、インデックスを使用して最大のオブジェクトから開始し、最初のオブジェクトに戻ると、コードが簡単になります。(反復子を使用したステップ -1) (そうでない場合は、アクティブなオブジェクトが削除されると、For each が列挙子ポインターを前のオブジェクトに戻すため、オフセットが必要です)

例えば。

For intA = 10 to 1 step -1 
    ' ...
Next

たとえば、For Each | Next を使用する場合はどうでしょうか。

For each rngCell in Selection.Cells
    ' ...
Next

どうすればループできるのか後ろ向きループ構文を使用していますfor eachか?

ベストアンサー1

for each ループ構文を使用して逆方向にループすることはできません。

として代替ループを使うこともできますFor i = a To 1 Step -1:

Sub reverseForEach()
    Dim i As Long, rng As Range

    Set rng = ActiveSheet.Range("A1:B2")

    For i = rng.Cells.Count To 1 Step -1

        Debug.Print rng.item(i).Address
        ' Or shorthand rng(i) as the Item property 
        ' is the default property for the Range object.
        ' Prints: $B$2, $A$2, $B$1, $A$1

    Next i

End Sub

これは、Item プロパティを持つすべてのコレクションで機能します。たとえば、ワークシート、領域、または図形などです。

注: Range オブジェクトで使用する場合のループの順序は、右から左、そして上になります。

おすすめ記事