こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。
皆さんは、VBAでループ処理を途中でスキップする方法を知っていますか?
ループ処理では、無駄な処理を実行せずにスキップしたいケースはよくあります。
そこで今回は、
・処理をジャンプするためのGoToステートメントの使い方
といった基礎的なことから、
・ループ処理をスキップする方法
・ループ処理を途中で終わらせる方法
・ループ処理中にExcelが固まってしまった場合の対処方法
といった応用的な方法まで、徹底的に解説します!
スキップ処理を作るためのGoToステートメントとは
ループ処理をスキップする場合は、GoToステートメントを使います。
そのため、最初にGoToステートメントの簡単な使い方を解説します。
GoToステートメントを使うと、指定したラベル先へ処理をジャンプすることができます。
使い方:
Sub Test() GoTo ラベル名 '処理1 ' ' ' ラベル名: '処理2 ' ' ' End Sub
上の例では、ラベル先の処理2は実行されますが処理1は実行されません。
このように、処理を途中でジャンプすることができます。
GoToステートメントの詳しい使い方については以下で詳しく解説しているので、気になる方は見てみてくださいね!
ループ処理をスキップする方法とは
次に、GoToステートメントを使ってループ処理をスキップする方法を解説します。
最初に、スキップしないループ処理のサンプルを用意しました。
スキップなしのループ処理サンプル:
Sub Test() Dim i As Long For i = 0 To 10 Debug.Print i Next i End Sub
実行結果:
0 1 2 3 4 5 6 7 8 9 10
変数iが1~10になるまでループして、iの値を出力する処理ですね。
次に、iが偶数のとき処理をスキップする処理を入れたサンプルがコチラです。
スキップ処理を入れたサンプルコード:
Sub Test2() Dim i As Long For i = 0 To 10 'iが偶数のときのみスキップ If i Mod 2 = 0 Then GoTo Continue End If Debug.Print i Continue: Next i End Sub
実行結果:
1 3 5 7 9
割り算の余りを計算するMod関数を使って、「i Mod 2 = 0」の条件で偶数を判定しています。
偶数判定しているIF文の中に「GoTo Continue」を書くことで、For文の最後に書いているContinueラベルまで処理をスキップしています。
このように、GoToステートメントを使えば、簡単に処理をスキップすることができます。
ループ処理を抜ける方法とは
ここまでスキップする方法を解説してきましたが、For文を終わらせて次の処理に移動したいケースもありますよね。
「Exit For」をFor文の中に書くことで、簡単にFor文を終わらせることができます。
ループ処理の途中で処理を終わらせるサンプルコード:
Sub Test3() Dim i As Long For i = 0 To 10 'iが5になったら処理終了 If i = 5 Then Exit For End If Debug.Print i Next i End Sub
実行結果:
0 1 2 3 4
この例では、iが5になった時にFor文の処理を終わらせています。
このように、ループ処理を途中で簡単に終わらせることができます。
GoToステートメントでスキップ、Exit Forで終了と覚えておくと、For文が使いやすくなるのでおすすめです!
ループ処理が重たくExcelが固まってしまった場合の対処方法
ループ処理を動かしていると重たい処理をループ処理で動かしてしまった場合や、条件を間違えて無限ループにしてしまった場合など、処理がとまらずExcelが固まってしまうケースがあります。
そのため、処理を強制終了する方法を覚えておくのがおすすめです!
処理を強制終了する方法については、以下で詳しく解説しています。
途中まで書いていたコードを消さずに処理を止める方法についても書いているので、知らない方は見てみるのがおすすめです!
補足:VBAでループ処理をする方法3選
今回はループ処理にFor Nextステートメントを使って解説してきましたが、ループ処理は他にもあります。
For Nextステートメントとあわせて、Whileステートメント、For Eachステートメントを覚えておくとループ処理の幅が広がるのでおすすめです!
それぞれ以下のように使い分けることができます。
- For Next:回数を指定してループ処理したい場合
- While:指定の値に到達するまで処理をループしたい場合
- For Each:配列の要素数やオブジェクトの数分処理をループしたい場合
3つのループ処理詳しい使い方については、以下記事で詳しく解説しているので見てみてくださいね!
まとめ
今回は、ループ処理の途中で処理をスキップする方法について解説しました!
ループ処理では、無駄な処理を実行せずにスキップしたいケースはよくあります。
GoToステートメントの使い方はとても簡単なので、ぜひ使ってみてくださいね!