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 オブジェクトで使用する場合のループの順序は、右から左、そして上になります。