Developer

【ExcelVBA】Exitステートメント
2022.01.31
Lv1

【ExcelVBA】Exitステートメント

処理の中断について

プログラムで何らかの処理をしている最中に、その処理を途中で中断する必要がでてくることがあります。
例えば、ある条件に該当したらその行より下に記述してある処理は行わずにfunctionを終了したいといったような場合です。
他にも前回紹介したDo LoopステートメントやFor Nextといった繰り返し処理を途中で終了したいといった場合です。
こうした処理を途中で終了させるためのステートメントが存在します。
それがExitステートメントです。Exitステートメントを使用することで繰り返し処理やプロシージャを途中で終了することができるようになります。
繰り返し処理の場合、以下のような動作となります。

Exitステートメントの書式

Exitステートメントは先ほど述べたように繰り返し処理やプロシージャを途中で終了させることができます。
それぞれ書式が少し異なりますので、まずは書式から見ていきましょう。
For Nextステートメントを中断する場合

Exit For

Do Loopステートメントを中断する場合

Exit Do

Subプロシージャを中断する場合

Exit Sub

Functionプロシージャを中断する場合

Exit Function

Propertyプロシージャを中断する場合 ※まだ一度も紹介していませんので参考までに

Exit Property

Exitの後ろに中断したい対象を指定します。

Exitステートメントの使い方

では次にExitステートメントの使い方について見ていきましょう。
Excelに以下のようなデータが格納されているとします。

セルの値を読み込んでいき、値がなくなったら処理を終わらせるとします。
ただし途中で対象の文字が出てきた場合はそこで処理を終了し、何行目かを表示させるとします。
今回はExitという文字列があったら終わらせます。

Sub VBA基礎第36回_1()
    
    Dim sum As Integer
    Dim i As Integer
    sum = 0
    i = 1
   
    '値がなくなるまでデータを読み込んでいく 途中でExitという文字列があると読み込みをやめます。
    Do Until Cells(i, 1) = ""
    
        If Cells(i, 1) = "Exit" Then
            Exit Do                 '読み込んだセルのデータがExitに該当した場合、繰り返し処理を終わらせます。
        End If
        
        i = i + 1
    Loop
    
    MsgBox i & "行目に存在しています"
       
End Sub

処理を見ていきましょう。
Do Loopステートメントを使用してA列のデータを繰り返し読み込んでいきます。
Untilを使用して””と一致する、つまり何もデータがないところまで繰り返すという処理にしています。
途中でExitが存在した場合、処理を終わらせる必要があるためIfステートメントを使用しています。
Exitが存在したらIfステートメント内のExit Doが実行されるかたちとなります。
該当しなかった場合はiをカウントアップしまた繰り返し処理の最初に戻ります。
実行結果は以下のようになります。

このようにExitを使用することで繰り返し処理を終了させることができます。
whileやuntilで条件を指定せず無限にループさせて、ある条件のときにだけ繰り返し処理を終了させるといった使い方もできます。
Exitをうまく使うことで無駄に繰り返し処理を続けることなく、条件によってすぐ次の処理に移行させることができたりしますので使い方を覚えておいてください。

まとめ

Exitステートメントを使用することで繰り返し処理やプロシージャを途中で終了することができます。
Subプロシージャを終了させるExit Sub、Functionプロシージャを終了させるExit Function、For Nextを終了させるExit For、Do Loopを終了させるExit Do、Propertyプロシージャを終了させるExit Propertyがあります。

確認問題

確認問題
以下の「○○○」に当てはまる文言を解答してください。

・○○○ステートメントを使用することで繰り返し処理やプロシージャを途中で終了させることができます。
・Do Loopを終了させるには○○○を記述します。

答え


・Exitステートメントを使用することで繰り返し処理やプロシージャを途中で終了させることができます。
・Do Loopを終了させるにはExit Doを記述します。

次回は、「For Each Nextステートメント」です。

 

連載目次リンク

ExcelVBA 入門 連載目次