Home » エクセルマクロ・Excel VBAの使い方 » For~Nextループを逆順に後ろから前に回す

対象:Excel2007, Excel2010, Excel2013

「excel vba for 逆順」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

Excel VBA(Visual Basic for Applications)の、For~Nextループを、逆から(後ろから前に)回す方法を探している方による検索でしょうか。

[スポンサードリンク]

For~Nextループを前から回すサンプルマクロ

まずは、前から回すループを確認しておきましょう。

複数のシートが存在しているブックをアクティブにしておいて、以下のようなマクロを実行すると、シート名が左から・前から順にメッセージボックスに表示されます。


Sub ループを前から回す()
 Dim i As Long
 Dim cnt As Long

 cnt = Sheets.Count
 For i = 1 To cnt
  MsgBox Sheets(i).Name
 Next i
End Sub

仮に、下図のようにシートが並んでいれば、

Excel VBAでFor~Nextループを逆順に後ろから前に回す

「Sheet1」「Sheet2」「Sheet3」の順でメッセージボックスを表示されます。

For~Nextループを後ろから逆順に回すサンプルマクロ

「excel vba for 逆順」
というキーワードで検索した方は、これを、後ろから・右から
「Sheet3」「Sheet2」「Sheet1」
の順でシート名を表示する方法を探していらしたのでしょう。


Sub ループを後ろから回す()
 Dim i As Long
 Dim cnt As Long

 cnt = Sheets.Count
 For i = cnt To 1 Step -1
  MsgBox Sheets(i).Name
 Next i
End Sub

上記のようなマクロにすれば、後ろからループを回すことができます。

ポイントは、
 For i = cnt To 1 Step -1
です。

先にご紹介した、前からループを回す場合は、
 For i = 1 To cnt
となっていましたが、そもそもこれは、
 For i = 1 To cnt Step 1
を省略した書き方です。

カウンター変数・iに、「1」から「cnt」(シートの枚数)まで、1ずつ増やした値(Step 1)を順番に代入しながらループを回しなさいというのが、
 For i = 1 To cnt Step 1
の部分の意味です。

For~Next文は、カウンター変数を1ずつ増やしながらループを回すことが多いので、「Step 1」を省略することができ、一般的に省略することが多いのです。

このいくつ増やすかを指定する「Step」の後ろに「-1」(マイナス1)を指定すれば、1ずつ減らしながら代入が行われます。

減らしていくわけですから「To」の前後に指定する、開始の値と終了の値も当然入れ替える必要があり、Toの前にループ開始時の大きい値、Toの後ろにループを終了する小さいほうの値を指定します。それが、
 For i = cnt To 1 Step -1
です。

このサイトでは以下のような「Step -1」を使ったExcelマクロをご紹介しています。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » For~Nextループを逆順に後ろから前に回す

TrackBack:3

TrackBack URL
シート名を右から取得するExcelマクロ from インストラクターのネタ帳
アクティブなブックのシート名を右から順番に取得するExcel(エクセル)マクロをご紹介しています。
VBAでデクリメント演算子は? from インストラクターのネタ帳
VBAにはJavaScriptのようなデクリメント演算子は存在しません。
配列の要素を逆順に処理する from インストラクターのネタ帳
配列変数の要素を逆順に処理するには、For~Nextループを「Step -1」で回します。

Home » エクセルマクロ・Excel VBAの使い方 » For~Nextループを逆順に後ろから前に回す

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

検索


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

.