【ExcelVBA入門】疑似的にcontinueするためのループ処理スキップ方法とは

こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。

皆さんは、VBAでループ処理を途中でスキップする方法を知っていますか?

ループ処理では、無駄な処理を実行せずにスキップしたいケースはよくあります。

そこで今回は、

・処理をジャンプするためのGoToステートメントの使い方

といった基礎的なことから、

・ループ処理をスキップする方法

・ループ処理を途中で終わらせる方法

・ループ処理中にExcelが固まってしまった場合の対処方法

といった応用的な方法まで、徹底的に解説します!

スキップ処理を作るためのGoToステートメントとは

ループ処理をスキップする場合は、GoToステートメントを使います。

そのため、最初にGoToステートメントの簡単な使い方を解説します。

GoToステートメントを使うと、指定したラベル先へ処理をジャンプすることができます。

使い方:

Sub Test()
  GoTo ラベル名
   '処理1
   '
   '
   '
ラベル名:
   '処理2
   '
   '
   '
End Sub

上の例では、ラベル先の処理2は実行されますが処理1は実行されません。

このように、処理を途中でジャンプすることができます。

GoToステートメントの詳しい使い方については以下で詳しく解説しているので、気になる方は見てみてくださいね!

【VBA入門】GoToでスキップ(ラベル、ループ制御、エラー処理)
更新日 : 2019年4月19日

ループ処理をスキップする方法とは

次に、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が固まってしまうケースがあります。

そのため、処理を強制終了する方法を覚えておくのがおすすめです!

処理を強制終了する方法については、以下で詳しく解説しています。

途中まで書いていたコードを消さずに処理を止める方法についても書いているので、知らない方は見てみるのがおすすめです!

【ExcelVBA入門】処理が固まってしまった場合に強制終了する方法とは
更新日 : 2018年8月29日

補足:VBAでループ処理をする方法3選

今回はループ処理にFor Nextステートメントを使って解説してきましたが、ループ処理は他にもあります。

For Nextステートメントとあわせて、Whileステートメント、For Eachステートメントを覚えておくとループ処理の幅が広がるのでおすすめです!

それぞれ以下のように使い分けることができます。

  • For Next:回数を指定してループ処理したい場合
  • While:指定の値に到達するまで処理をループしたい場合
  • For Each:配列の要素数やオブジェクトの数分処理をループしたい場合

3つのループ処理詳しい使い方については、以下記事で詳しく解説しているので見てみてくださいね!

【ExcelVBA入門】繰り返し処理をするための3つの方法を徹底解説!
更新日 : 2019年8月30日

まとめ

今回は、ループ処理の途中で処理をスキップする方法について解説しました!

ループ処理では、無駄な処理を実行せずにスキップしたいケースはよくあります。

GoToステートメントの使い方はとても簡単なので、ぜひ使ってみてくださいね!

\業界最安級/
月額2,980円のプログラミングスクール

✔ 業界最安値の月定額2,980円
✔ 「Q&A掲示板」で平均30分以内に回答がもらえる
✔ 月に一度の「オンライン相談」で悩みを解決
✔ 教材の数は30種類以上
✔ 入会金不要+いつでも退会OK

公式サイトはこちら

Writer

Sanshiro Wakizaka

フリーランス

北海道出身の30歳で、フリーランスエンジニア兼テックライターとして活動中。新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。

Webアプリ、業務アプリ開発において、要件定義 ~ 運用保守まで様々な経験あり。また3歳の娘がいる1児のパパで、日々娘との時間を確保するために仕事を頑張っています!
侍エンジニアでは、【誰でもわかるレベルのわかりやすさ】を意識して、記事を執筆中。

あなたの目的に合わせた
SAMURAI ENGINEERの運営サービス

SAMURAI ENGINEER Pro

未経験でも挫折しないプログラミングスクール

詳細はこちら

SAMURAI TERAKOYA

日本最大級のサブスク型オンラインITスクール

詳細はこちら

SAMURAI ENGINEER Freelance

「一人で稼げる」スキルを身につける

詳細はこちら
Close