【SAP ABAP】基本構文:条件分岐(IF、CASE)

登場人物紹介

三崎レイナ
社会人1年目。新卒でITコンサルティングファームに就職。初配属がSAPプロジェクトにアサインされる。SAPがわからないことだらけで悩んでいたところ、会社の先輩にSAPラボの所長を紹介され、毎週末に所長とSAPのお勉強中!

博士
SAPラボの所長。SAP大好き博士!SAP導入プロジェクトを構想策定~運用保守まであらゆるフェーズを数多く経験。
いまは優しきおじいちゃんだが、プロマネバリバリの時代はかなり怖かったらしい。現在は引退し、SAPの後進育成と啓蒙活動に従事中!

この記事を読むメリット

  • IF文、CASE文を使用して、条件分岐の処理を作成できるようになります。
博士

今回は条件分岐について説明するぞい!

条件分岐は、プログラムが特定の状況や条件に応じて異なる処理を行うための重要な構文です。これをマスターすることで、プログラムをもっと柔軟かつ効率的に動かすことができます。頻繁に使用されるのでしっかりマスターしておきましょう。

この記事のポイント

条件分岐について

条件分岐とは、プログラム内で特定の条件を判断し、条件を満たしているかどうかに基づいて処理を変更することです。「もし〇〇が△△ならば××をする」というように、条件に応じて処理を分岐させます。条件分岐を実現するためにABAPでは”IF文”と”CASE文”を使用します。

IF文(IF~ENDIF)

博士

まずはIF文じゃ。
IF文は条件式が真(TRUE)か偽(FALSE)かに基づいて異なる処理を実行するぞい!

構文
 IF 条件式1.
  条件式1が真の場合に実行する処理.
 ELSEIF 条件式2.
  条件式2が真の場合に実行する処理.
 ELSE.
  全ての条件が偽の場合に実行する処理.
 ENDIF.
 ※”IF”、”ELSEIF”、”ELSE”、”ENDIF”の後にそれぞれ”.”(ピリオド)が必要です。
 ※複数の条件分岐を行いたい場合は”ELSEIF”を使用します(複数追加可能)。また、
“ELSE”は省略することも可能です。

使用例
DATA: lv_message TYPE string. " メッセージを格納する変数を宣言

PARAMETERS: p_number TYPE i.  " ユーザー入力用のパラメータを宣言

* 入力された数値をチェック
IF p_number > 0.
  lv_message = 'The number is positive.'. " 数値が正の場合のメッセージを設定
" 入力された数値が負の数かどうかをチェック
ELSEIF p_number < 0.
  lv_message = 'The number is negative.'. " 数値が負の場合のメッセージを設定
ELSE.
  lv_message = 'The number is zero.'.     " 数値がゼロの場合のメッセージを設定
ENDIF.

WRITE: lv_message. " メッセージを表示
実行結果

【ABAP】IF文(実行結果)

博士

選択画面で入力した内容で処理が分岐され、条件に合った結果が出力されているぞい!

補足:比較演算子

ABAPにおける比較演算子は、条件式で使用され、2つの値を比較して真偽を判断します。以下に、ABAPでよく使用される比較演算子の一覧を示します。

演算子説明
=(EQ)2つの値が等しい場合に真を返す
<>(NE)2つの値が等しくない場合に真を返す
>(GT)左辺の値が右辺の値より大きい場合に真を返す
<(LT)左辺の値が右辺の値より小さい場合に真を返す
>=(GE)左辺の値が右辺の値以上の場合に真を返す
<=(LE)左辺の値が右辺の値以下の場合に真を返す
ABAPの比較演算子

CASE文(CASE~ENDCASE)

博士

次はCASE文じゃ。
CASE文は変数などのデータオブジェクトの値に基づいて異なる処理を実行するぞい!IF文とは異なり、条件式を使用しての判定はできないぞい。

構文
 CASE 変数.
  WHEN 値1.
   変数が値1に一致する場合の処理.
  WHEN 値2.
   変数が値2に一致する場合の処理.
  WHEN OTHERS.
   どの条件にも一致しない場合の処理.
 ENDCASE.
 ※”CASE”、”WHEN”、”WHEN OTHERS”の後にそれぞれ”.”(ピリオド)が必要です。
 ※IF文と異なり式ではなく変数などのデータオブジェクトを指定します。“WHEN OTHERS”は省略することも可能です。

使用例
DATA: lv_message TYPE string. " メッセージを格納する変数を宣言

PARAMETERS: p_month TYPE i.   " ユーザー入力用のパラメータを宣言

* 入力された月の日数を設定
CASE p_month.
  WHEN 1 OR 3 OR 5 OR 7 OR 8 OR 10 OR 12.
    lv_message = 'Days in the month: 31'. " 31日の月の場合
  WHEN 4 OR 6 OR 9 OR 11.
    lv_message = 'Days in the month: 30'. " 30日の月の場合
  WHEN 2.
    lv_message = 'Days in the month: 28'. " 2月の場合は通常は28日
  WHEN OTHERS.
    lv_message = 'Invalid month'. " 1から12以外の数値が入力された場合
ENDCASE.

WRITE: lv_message. " メッセージを表示
実行結果

【ABAP】CASE文(実行結果)

博士

IF文と同じように選択画面で入力した内容で処理が分岐され、条件に合った結果が出力されているぞい!

IF文とCASE文の共通のポイント

処理順序

IF文もCASE文も、条件は上から下へと順番にチェックされ、条件に一致した時点でそのブロックの処理が実行されます。また、条件に一致した以降の条件はチェックされません

ネスト(入れ子)、複数の組み合わせ

IF文、CASE文の中にさらに別のIF文やCASE文をネスト(入れ子)することが可能です。これにより、複数の条件の組み合わせを表現することができます。例えば、ある条件が成り立った場合に、さらに別の条件をチェックする必要がある場合などに使用されます。
また、複数の条件を論理演算子(AND、OR)を使って組み合わせることが可能です。これにより、複数の条件を一つのブロックで表現することができます。

ネストの例
* 1つ目の例
IF lv_age >= 18.       " 年齢が18歳以上であることをチェック
  IF lv_height >= 170. " 身長が170cm以上であることをチェック
    WRITE: / 'You are an adult and tall enough.'. " 成人で、かつ170cm以上の場合の処理
  ENDIF.
ENDIF.

* 2つ目の例
CASE weather.
  WHEN 'Sunny'.        " 天気が晴れであることのチェック
    CASE time.
      WHEN 12.         " 時間が正午であることのチェック
        WRITE: / 'It is sunny at noon.'. " 天気が晴れで、時間が正午の場合の処理
    ENDCASE.
ENDCASE.

IF文とCASE文の使い分け

IF文とCASE文はどちらも条件分岐を行うための命令ですが、どちらを使用するかは状況によります。
適切に使い分けることでコードの可読性とメンテナンス性を向上させることができます。

IF文は条件が比較的少ない場合に適しており、CASE文は条件が多い場合や特定の変数に応じて分岐する場合に適しています。
また、一般的にはCASE文の方が少し処理速度は速いです。かといってIF文からCASE文に変更したとしても劇的な改善は期待できません。したがって、条件分岐の数に応じて適切な構文を選択することが重要です。

博士

今回はABAPの条件分岐で使用されるIF文、CASE文についてと、使い分けについて紹介したぞい!

レイナ

ありがとうございます!
これから条件分岐を使用したプログラムも作成していきます!

★★★SAPラボのライター募集★★★

SAPラボでは、SAPの知識を活かして副業をしたい方を募集してるのじゃ!

SAPラボのライターの特徴 

・ライティング初心者OK!
・報酬高単価!
・業務委託契約なので副業として最適!

SAP記事執筆者としての活動実績として利用可能なので、転職時や案件探しの際に企業へのアピール材料にもなります。

募集要項

・SAP導入や運用保守プロジェクトへの参画経験1年以上

ご応募/お問合せ先

info@sap-career.com

少しでもご興味ある方、ぜひお気軽にご連絡下さい!

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

新卒でSAPエンジニアとしてABAPでの新規開発や保守業務を担当。
業務内容としてはロジ系(MM/SD)がメインで、ABAPの開発が最も得意。

この記事のポイント