Home » エクセルマクロ・Excel VBAの使い方 » For Each~Nextループを逆順に?

対象:Excel2007, Excel2010, Excel2013

「excel vba for each 逆順」
「for each ws in worksheets 逆順」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスが時折あります。

For Each~Nextループを逆から回す方法を探している方による検索です。

[スポンサードリンク]

For Each~Nextループは順序を指定できない

例えば、以下のようなマクロで、アクティブなブックのシート名が順番にイミディエイトウィンドウに出力されます。

Sub ForEachNextループのサンプル()
 Dim sh as Object

 For Each sh in Sheets
  Debug.Print sh.Name
 Next sh
End Sub

この順番はあくまでもシートの並び順・左から右に向かう順番で出力されます。

「for each ws in worksheets 逆順」
は、これを逆向きに、右から左への順序で処理する方法を探している方による検索キーワードです。

残念ながら、For Each~Nextループでは、ループを回す順番を指定できません。
ヘルプにもループの順序を指定するような項目は見当たりません。

また、コレクションの並び順を逆にしてくれるReverse的なメソッドやステートメントでもあれば、For Each~Nextループを逆順に回すこともできるのでしょうが、残念ながらVBAにはそのような構文はなさそうです。

逆順にループを回したいときはFor~Nextループ

ループを逆順に回したい場合は、For Each~Nextループではなく、カウンタ変数を利用するFor~Nextループを使いましょう。

Sub ForNextループを逆から回すサンプル()
 Dim i as Long

 For i = Sheets.Count to 1 Step -1
  Debug.Print Sheets(i).Name
 Next i
End Sub

For~Nextループでは、Stepの後ろにカウンタ変数を、いくつずつ増やすのかを指定することができます。

ここを「Step -1」と指定すれば、カウンタ変数が「-1」ずつ増える(即ち「1」ずつ減る)ようになり、逆順にループを回すことができるようになります。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » For Each~Nextループを逆順に?

「エクセルマクロ・Excel VBAの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.