「excel vba for each 逆順」
「for each ws in worksheets 逆順」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスが時折あります。
For Each~Nextループを逆から回す方法を探している方による検索です。
For Each~Nextループは順序を指定できない
例えば、以下のようなマクロで、アクティブなブックのシート名が順番にイミディエイトウィンドウに出力されます。
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ループを使いましょう。
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」ずつ減る)ようになり、逆順にループを回すことができるようになります。
- Newer:Word VBAでアニメーションを削除する
- Older:初心者の目に落とした無理のないわかりやすい進行だった
Home » エクセルマクロ・Excel VBAの使い方 » For Each~Nextループを逆順に?