ABAP

【ABAP】3分でわかるABAPマクロのすべて

ABAPでも、VBAのようなマクロを定義することができます。

ABAPマクロは、1つのプログラム内で同じような命令を複数回利用する場合に、極稀に用いられることがあります。

ABAPマクロは、複数の処理を1セットにまとめて定義しておき後から呼び出して利用するという点でサブルーチンや、汎用モジュールと同じ働きをします。が、利用方法や利用シーンが微妙に違い、マクロならではの注意点も存在します。

本ページでは、構文と注意点についてまとめていますので、是非ご覧ください。

構文ルール:ABAPマクロ

ABAPマクロの利用手順は大きく2つに分かれます。

始めに、ABAPマクロの定義。そして、次がABAPマクロの実行です。それぞれ分けて解説します。まずは、マクロの定義から。

ABAPマクロの定義

DEFINE (マクロ名).
・・・・
END-OF-DEFINITION.

※DEFINEとEND-OF-DEFINITIONの間に、マクロ内で行う具体的な処理を記述します。

まず、マクロを利用する前に必ず上記命令でマクロの定義を行う必要があります。処理内容については、基本的に通常と同じようにコーディングすることが可能です。

ABAPマクロの実行

(マクロ名).

ABAPマクロの実行は、マクロ名をベタ打ちしピリオドを打てば完了となります。

ただし、このように利用する方法はあまり多くは見かけません。次章で紹介するプレースホルダを利用することが普通です。

サンプルコードを用いて、プレースホルダを用いたABAPマクロの実行方法を学習しましょう。

プレースホルダを用いたABAPマクロ

プレースホルダを用いることで汎用モジュールサブルーチンのようにインプットとアウトプットを定義することができます。

DATA:
ADD_NUMBER TYPE i VALUE 1,
RESULT TYPE i.

DEFINE calc.
RESULT = 10 + &1.
END-OF-DEFINITION.

calc ADD_NUMBER.

WRITE RESULT.

プレースホルダの指定:定義

プレースホルダの指定は、ABAPマクロの定義文の中に「&」指定を行います。

プレースホルダは、最大で9個まで保持することが可能です。(プレースホルダをあまり多く指定しすぎると可読性が落ちるのでお勧めしません。)

DEFINE calc.
RESULT = 10 + &1.
END-OF-DEFINITION.

プレースホルダの指定:実行

プレースホルダを保持しているABAPマクロの実行は、マクロ名の後ろに実際に用いる値やデータオブジェクトを指定します。

calc ADD_NUMBER.

プレースホルダが複数個ある場合は、&1~&9の順に並べていくだけです。

ちなみに、サンプルコードの結果は「11」となります。

ABAPマクロ利用時の注意点

ここまで解説してきたABAPマクロですが、実際はほぼ利用されません。

標準のプログラムなどでたまに見かける程度です。

では、なぜあまり用いられることがないのか?2つの観点から整理します。

可読性の低下

ABAPマクロは、定義の中身までデバッグすることができません。

※デバッグ実行時にABAPマクロの定義部分の中身の処理まで追うことができません。

DATA:
ADD_NUMBER TYPE i VALUE 1,
RESULT TYPE i.

DEFINE calc.
RESULT = 10 + &1.
END-OF-DEFINITION.

calc ADD_NUMBER.

WRITE RESULT.

具体的に言うと、グレーハイライト部分にブレイクポイント設置しても、ABAPマクロの定義文の中身まで処理を追ってくれないのです。

したがって、ABAPマクロを利用するぐらいであれば、汎用モジュールやサブルーチンといった形でモジュール化したほうが良いということです。

サブルーチンや汎用モジュールが多用されるのに、ABAPマクロはその存在すらあまり知られていないのはここに大きな原因があります。

利便性の低さ

ABAPマクロは、サブルーチンや汎用モジュールと異なり必ず実行文の前に定義文を書く必要があります。

サブルーチンや汎用モジュールでは、①実行文⇒②定義文としても問題ありませんが、ABAPマクロの場合①実行文⇒②定義文とするとエラーになります。

インクルードプログラムなどを用いてコーディングする場合には、なおさら注意が必要となるため、ABAPマクロはだれにも利用されたがらない存在なのです。

サンプルコードで用いたように、簡単な定義文と実行文の組み合わせであれば用いてもよいかもしれませんが、できるだけサブルーチンや汎用モジュールなどで代用したほうがよいでしょう。

ここまで解説してきて結論がさみしいですが、ABAPマクロはできるだけ利用しないことをお勧めします。