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