このページではループ処理の中で利用されるEXIT命令とCONTINUE命令について解説します。
参考 LOOP処理とは?
EXITはループを強制終了し制御をループの次の命令に移動する命令。CONTINUEは、ループ内の現在の繰り返しをスキップし、次の繰り返しに直接移動するために使用される命令です。
DATA: BEGIN OF itab OCCURS 0,
number TYPE i,
END OF itab.
DO 10 TIMES. " 10回繰り返す
itab-number = sy-index.
APPEND itab.
ENDDO.
LOOP AT itab.
IF itab-number > 5. " 数値が5より大きい場合
EXIT. " ループを終了する
ENDIF.
IF itab-number MOD 2 = 0. " 数値が偶数の場合
CONTINUE. " 現在のループの繰り返しをスキップする
ENDIF.
WRITE: / '数値は:', itab-number. " 数値を出力
ENDLOOP.
" 出力結果:
" 数値は: 1
" 数値は: 3
" 数値は: 5

このページではEXIT命令とCONTINUE命令の基本と両者の違い、使い分けのコツをサンプルコードつきでわかりやすくご説明します。
SAPエンジニア/ABAPerを目指す方であれば知らないと恥ずかしい基本知識ばかりです。是非最後までご覧ください。
参考 ABAPの基本構文ルール
ABAP:EXIT命令
EXITはループを終了し、制御をループの次の命令に移動するために利用されます。

これは主に、一定の条件が満たされたときにループを終了するために使用されます。
以下に、EXIT命令を利用した簡単なサンプルコードです。
DATA: BEGIN OF itab OCCURS 0,
number TYPE i,
END OF itab.
DO 10 TIMES.
itab-number = sy-index.
APPEND itab.
ENDDO.
LOOP AT itab.
WRITE: / 'Number is:', itab-number.
IF itab-number > 5.
EXIT. " 5 より大きくなったらループを抜ける
ENDIF.
ENDLOOP.
" 出力結果:
" Number is: 1
" Number is: 2
" Number is: 3
" Number is: 4
" Number is: 5
参考 DATA / DO~ENDDO / APPEND / WRITE / IF
このコードでは、内部テーブルitabに対してループ処理を実行し、それぞれの要素を出力します。その際、要素の値が5より大きい場合、EXIT命令が実行されループが終了するという仕組み。

結果、このコードは1から5までの数字を出力します。
EXIT命令は、その命令が実行されると無条件にループ処理を抜けるという点を押さえておきましょう。

EXIT命令は、LOOP命令だけではなく、DOループ・WHILEループの中でも勿論利用することが可能です。
DATA: number TYPE i VALUE 0.
DO.
ADD 1 TO number.
WRITE: / 'Number is:', number.
IF number >= 5.
EXIT. " If number is greater or equal to 5, exit from the loop
ENDIF.
ENDDO.
" 結果
" Number is: 1
" Number is: 2
" Number is: 3
" Number is: 4
" Number is: 5
ABAP:CONTINUE命令
CONTINUE命令は、ループ内の現在の繰り返しをスキップし、次の繰り返しに直接移動するために使用されます。
EXIT命令
⇒ループ全体を抜ける
CONTINUE命令
⇒処理中のレコードを抜ける(次のレコード処理に移る)
以下に、その使い方を示すサンプルコードを示します。
DATA: BEGIN OF itab OCCURS 0,
number TYPE i,
END OF itab.
DO 10 TIMES.
itab-number = sy-index.
APPEND itab.
ENDDO.
LOOP AT itab.
IF itab-number MOD 2 = 0. " 偶数の際は現在の処理をスキップする
CONTINUE.
ENDIF.
WRITE: / 'Number is:', itab-number.
ENDLOOP.
" 出力結果
" Number is: 1
" Number is: 3
" Number is: 5
" Number is: 7
" Number is: 9
CONTINUEは日本語で、"続ける" "続く" 等の意味を持つ通り、処理中のレコードの処理を抜けて「次のループ処理に進む」という意味になります。
↑のコードでは、内部テーブルitabのすべての要素に対してループ処理を実行しますが、要素の値が偶数である場合、CONTINUE命令が実行され、その繰り返しはスキップされます。

結果、このコードは奇数のみを出力します。
EXIT命令が、ループ全体を抜ける命令であるのに対して、CONTINUE命令はループ中の当該レコードの処理を抜けるという意味になるのに注意しましょう。
CONTINUE命令もEXIT命令と同様に、DOループやWHILEループでも同じように利用することが可能です。
DATA: number TYPE i VALUE 0.
DO 10 TIMES.
ADD 1 TO number.
IF number MOD 2 = 0. " If number is even, skip the loop iteration
CONTINUE.
ENDIF.
WRITE: / 'Number is:', number.
ENDDO.
" 出力結果
" Number is: 1
" Number is: 3
" Number is: 5
" Number is: 7
" Number is: 9
EXIT命令とCONTINUE命令の違い:ループ外での利用
EXIT命令とCONTINUE命令は主にループ内で利用されますが、ループ外での動作に重要な違いがあります。

以下にポイントを整理します。
以下のサンプルプログラムでは、my_formサブルーチン内でnumberが5に達した時点でEXIT命令が実行され、サブルーチンから抜け出すことを示しています。
DATA: number TYPE i VALUE 0.
FORM my_form.
DO 10 TIMES.
ADD 1 TO number.
WRITE: / 'Number is:', number.
IF number = 5.
EXIT. " 数値が 5 に等しい場合サブルーチンを終了
ENDIF.
ENDDO.
WRITE: / 'This message will not be displayed if number is equal to or greater than 5'.
ENDFORM.
START-OF-SELECTION.
PERFORM my_form.
" 出力結果
" Number is: 1
" Number is: 2
" Number is: 3
" Number is: 4
" Number is: 5

'This message will not be displayed if number is equal to or greater than 5'というメッセージは表示されません。これは、numberが5に達した時点でEXITが実行され、制御がサブルーチンから抜け出してしまうからです。このように、EXIT命令はモジュール内から即座に抜け出すためにも使用されます。
ループを抜ける処理を行いたい場合は、EXIT命令、CONTINUE命令、そしてCHECK命令のいずれかを適切に選択して利用することが大切です。
EXIT命令/CONTINUE命令のまとめ

初めてABAPを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。
ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?
読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!
