「VBA excel range for each 逆順」
といった検索キーワードでのアクセスに気付きました。
Rangeオブジェクトに限らず、VBAのFor Each~Nextループの手軽さに気付いた方から
「For Each~Nextループを逆順に回すにはどうすればいいのでしょうか?」
というご質問をいただくことがあります。
残念ながらFor Each~Next文で、ループを逆方向に回すような指定はできません。
Rangeオブジェクトでも、For Each~Next文で逆順に処理することはできません。For~Nextループを使いましょう。
増分値にマイナスの値を指定しましょう
拙著『いちばんやさしいExcel VBAの教本』のLesson 43「For~Next文の繰り返し条件を使いこなしましょう」で、
増分値にはマイナスの値を指定することもできます。この場合、カウンター変数は繰り返すたびに小さくなるので、最終値より初期値を大きな数値にする必要があります。
とお伝えしています。
Rangeオブジェクトに対して逆順にループ処理を行いたい場合も、増分値にマイナスの値を指定します。
zを逆順で書くようにループ処理するサンプルマクロ
A1:C2セルに対して、アルファベットの「z」を逆順に書くようにループ処理したい場合は、以下のSubプロシージャが参考になるでしょう。
Dim i As Long With Range("A1:C2")
For i = .Count To 1 Step -1
MsgBox .Item(i).Address(False, False)
Next i
End With
End Sub
上記のSubプロシージャを実行すると、
C2 B2 A2 C1 B1 A1
の順でメッセージボックスにセルアドレスが表示されます。
mを逆順で書くようにループ処理するサンプルマクロ
A1:C2セルに対して、アルファベットの「m」を逆順で書くようにループ処理したい場合は、変数を2つ使った2重ループにして、それぞれの増分値をマイナス指定します。
Dim c As Long, r As Long With Range("A1:C2")
For c = .Columns.Count To 1 Step -1
For r = .Rows.Count To 1 Step -1
MsgBox .Item(r, c).Address(False, False)
Next r
Next c
End With
End Sub
上記のSubプロシージャを実行すると、
C2 C1 B2 B1 A2 A1
の順でセルアドレスがメッセージボックスに表示されます。
- Newer:〇〇先生はなぜ教えてくれなかったのか?
- Older:グラフタイトルを変数に-ChartTitleオブジェクト
Home » Excel VBA Rangeオブジェクト » RangeへのFor Each~Nextを逆順に?