For nextの繰り返し処理の途中で、逆順に後ろから処理を回したいときがあります。
このときFor NextでStep -1を記述することで、逆順に処理を回すことができます。
1 2 3 |
For i = X To Y Step -1 処理 Next |
XからYまで1ずつカウントダウンしながら処理を実行
ここでは、5,4,3,2,1とカウントダウンしながら、繰り返しループを実行させる方法を紹介します。
目次
For Next文をStep-1で逆順に後ろから回す
ここではi=5,4,3,2,1と繰り返し処理するなかで、iが偶数のときは行を削除していきます。
逆にiが奇数のときは、何も処理を行いません。
まずは全体のプログラムを紹介します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
'プログラム0|変数宣言の指定 Option Explicit 'プログラム1|プログラム開始 Sub Sample9() 'プログラム2|変数設定 Dim i As Long 'プログラム3|i=5~1まで繰り返し処理 For i = 5 To 1 Step -1 'プログラム4|iが偶数(2で割り切れる)の場合に処理を実行 If i Mod 2 = 0 Then 'プログラム5|行を削除 Rows(i).Delete End If Next 'プログラム6|プログラム終了 End Sub |
以下で詳しく説明します。
プログラム0|変数宣言の指定
1 |
Option Explicit |
「Option Explicit」とは、変数宣言を強制するためのものです。
予期しないエラーを防止できるため「Option Explicit」を入力することを習慣化することを推奨しています。
詳しい説明は以下のページで紹介しています。
プログラム1|プログラム開始
1 |
Sub Sample9() |
VBAではプロシージャという単位でプログラムを呼び出します。
プロシージャの構文は下記となっています。
1 2 3 |
Sub プロシージャ名() '実行プログラム End Sub |
「Sub」で始まり「End Sub」で終わります。
プロシージャに関連するmoduleの話については以下で説明しています。
プログラム2|変数設定
1 |
Dim i As Long |
本プログラムで使用する変数を設定します。
Long(整数)型の変数を使います。
このiはFornextの数値カウンターとして使用します。
変数については、以下のページで紹介しています。
プログラム3|i=5~1まで繰り返し処理
1 2 3 4 5 6 7 8 9 |
For i = 5 To 1 Step -1 'プログラム4|iが偶数(2で割り切れる)の場合に処理を実行 'If i Mod 2 = 0 Then 'プログラム5|行を削除 'Rows(i).Delete 'End If Next |
上記のForとNextの間を、i=5,4,3,2,1と1つずつカウントダウンしながら、繰り返し処理を行います。
Step-1で逆順に処理を回す
処理
Next
これでXからYまで1ずつカウントダウンしながら、繰り返し処理を行うことができます。
なおX>Yでそれぞれには数値が入ります。
Debug.Printでの検証結果
1 2 3 4 5 6 7 8 9 10 |
Dim i As Long For i = 5 To 1 Step -1 Debug.Print i Next >>>5 >>>4 >>>3 >>>2 >>>1 |
このように5,4,3,2,1と1ずつカウントダウンしながら逆順に処理を実行できます。
プログラム4|iが偶数(2で割り切れる)の場合、処理をスキップしContinueへ
1 2 3 4 |
If i Mod 2 = 0 Then 'プログラム5|行を削除 'Rows(i).Delete End If |
「i Mod 2」でiを2で割ったときの余りを計算できます。
その余りが0のとき、すなわち2で割り切れる(つまり偶数)とき、プログラム5をを実行します。
プログラム5|行を削除
1 |
Rows(i).Delete |
i行目を削除します。
これで「行番号」の行を削除することができます。
この事例ではプログラム4で偶数のときのみ、プログラム5が実行されるようにしています。
プログラム6|プログラム終了
1 |
End Sub |
プログラム1と対になるプログラムで、プログラム終了させるための記述です。
「End Sub」を読み込むと、プログラムが終了します。
プログラムの解説はここまでです。
行数が変化する場合は、逆順が必要になる場合がある
ここでは行削除の事例をもとにfor nextの逆順処理について紹介しました。
この事例のように行削除などで行数が変化する場合は、逆順処理が有効な場合があります。
実行する処理によって、取捨選択できるようになると、レベルアップできるはずです。
Excel VBAについて詳しく理解したいなら
VBAを活用すると、仕事を効率化できる幅を広げることができます。
たとえば私が実際にVBAを活用して効率化してきた作業は以下の記事で紹介しています。
興味がある人は以下の記事もご覧ください。
動画でも解説しています。
エクセルマクロVBAで出来ることを15の事例で紹介|日常業務をラクにするヒントを見つけよう!
(音声が小さいので、ボリュームを上げてご覧いただければと思います)
VBAの勉強方法
私はプログラミング初心者からVBAを勉強を始めて少しずつレベルアップしていきました。
少しずつレベルアップしながら、難しい内容に挑戦していくと効率的に学ぶことができます。
上記のリンクでは、VBA勉強に役立つ内容を紹介しています。
興味がある人はご覧ください。