「excel vba for 逆順」
という検索で、このサイト『インストラクターのネタ帳』へのアクセスがありました。
Excel VBAの、For~Nextループを、逆から(後ろから前に)回す方法を探している方による検索でしょうか。
For~Nextループを前から回すサンプルマクロ
まずは、前から回すループを確認しておきましょう。
複数のシートが存在しているブックをアクティブにしておいて、以下のようなマクロを実行すると、シート名が左から・前から順にメッセージボックスに表示されます。
Dim i As Long
For i = 1 To Sheets.Count
MsgBox Sheets(i).Name
Next
End Sub
仮に、下図のようにシートが並んでいれば、
「Sheet1」「Sheet2」「Sheet3」の順でメッセージボックスが表示されます。
For~Nextループを後ろから逆順に回すサンプルマクロ
「excel vba for 逆順」
というキーワードで検索した方は、これを、後ろから・右から
「Sheet3」「Sheet2」「Sheet1」
の順でシート名を表示する方法を探していらしたのでしょう。
Dim i As Long
For i = Sheets.Count To 1 Step -1
MsgBox Sheets(i).Name
Next
End Sub
上記のようなマクロにすれば、後ろからループを回すことができます。
ポイントは、
For i = Sheets.Count To 1 Step -1
です。
For~Next文の「Step 1」は通常省略される
先にご紹介した、前からループを回す場合は、
For i = 1 To Sheets.Count
となっていましたが、そもそもこれは、
For i = 1 To Sheets.Count Step 1
を省略した書き方です。
カウンター変数iに、「1」から「Sheets.Count」(シートの枚数)まで、1ずつ増やした値(Step 1)を順番に代入しながらループを回しなさいというのが、
For i = 1 To Sheets.Count Step 1
の部分の意味です。
For~Next文は、カウンター変数を1ずつ増やしながらループを回すことが多いので、「Step 1」を省略することができ、一般的に省略することが多いのです。
For~Next文では「Step -1」でデクリメント
このいくつ増やすかを指定する「Step」の後ろに「-1」(マイナス1)を指定すれば、1ずつ減らしながら代入が行われます。
減らしていくわけですから「To」の前後に指定する、開始の値と終了の値も当然入れ替える必要があり、Toの前にループ開始時の大きい値、Toの後ろにループを終了する小さいほうの値を指定します。それが、
For i = Sheets.Count To 1 Step -1
です。
このサイトでは以下のような「Step -1」を使ったExcelマクロをご紹介しています。
最終更新日時:2020-09-12 07:04
Home » エクセルマクロ・Excel VBAの使い方 » For~Nextループを逆順に後ろから前に回す