本ページでは、ABAPで文字列結合を行うCONCATENATE命令について解説します。
CONCATENATE命令は、文字列を結合する命令です。基本的にはExcelの「concatenate」関数と同じような働きをするため難しい内容ではありません。
このページで学べる内容
- CONCATENATE命令の基本構文ルール
- CONCATENATE命令利用時の注意点
- SEPARATEDオプションの利用方法
ABAPerであれば当たり前に知っておきたい内容ばかりですので、是非最後までご覧ください。
構文ルール:CONCATENATE命令
CONCATENATE a1 a2 a3 ・・・・ INTO (変数).
a1、a2、a3については変数などのデータオブジェクトか、文字列を直接指定します。Excelのconcatenate命令とは異なり、各オブジェクト/文字列の間のカンマは不要です。スペースの扱いなど基本的なルールは、他の命令と同様です。
CONCATENATE命令の処理内容
CONCATENATE命令は、a1、a2、a3・・・と指定した順番に文字列を連結し、 "INTO" の後に指定した変数に格納する命令です。
a1~a4の変数にそれぞれ以下の文字列が格納されているとします。

ここで以下の命令を実行します。
CONCATENATE a1 a2 a3 a4 INTO (変数A).
結果、(変数A)には
Ihaveapen
という文字列が格納されることになります。再度の説明となりますが、ExcelのCONCATENATE関数と全く同じ処理を行う命令なので、イメージも簡単にできるかと思います。
ここからは、実際に利用する際の注意点について2点解説します。
CONCATENATE命令利用時の留意事項
- データ型の制限
- データ長(桁長)の制限
留意事項①:データ型の制限
CONCATENATE命令で扱えるデータ型は以下の5つに限定されます。
C・・・文字列
N・・・数値
D・・・日付(YYYYMMDD)
T・・・時刻(HHMMSS)
STRING・・・文字列(可変長)
これ以外のデータ型についてCONCATENATE命令を行うと構文エラー、もしくはプログラム実行エラーになるため注意が必要です。
※「データ型」に関する詳細はこちらに記載しておりますので、合わせてご覧ください。
留意事項②:データ長(桁長)の制限
CONCATENATE a1 a2 a3 a4 INTO (変数A).
とした場合、変数Aに文字列が収まりきらない場合があることを考慮する必要があります。具体的に言うと、変数Aを4文字の固定長として定義している場合です。
もし「変数A」のデータ長を4桁で定義していた場合、「Ihaveapen」(9文字)という結果を全て格納することができません。結果は「Ihav」というように変数Aのデータ長(4文字)に変換され、入りきらない分は全て切捨てされるため注意が必要です。
もし、CONCATENATE命令を利用してデータ長の桁溢れが発生した場合(格納先の変数に入りきらない場合)、SY-SUBRCには4がセットされます。
※SY-SUBRC(システム項目)について不明な方はこちらを参照ください。
逆に、変数Aが20文字の固定長として定義されていた場合は、余った分はブランクとして処理されます。
SEPARATEDオプション
ここからは、SEPARATEオプションについて解説していきます。さきほど解説した「Ihaveapen」という結果。パッと見では、文章として認識しづらい結果となったかと思います。
Ihaveapen
もしこの結果を
間にブランクを入れて「I have a pen」とできたら・・・。
そんなときに利用するのが、SEPARATEDオプションです。
構文ルール:SEPARATED BY
CONCATENATE a1 a2 a3 ・・・・ INTO (変数)
SEPARATED BY (変数 or 文字列).
SEPARATEというのは、日本語で「分ける」「別れる」「分離する」といった意味になります。
「SEPARATED」オプションを利用すると、指定した変数 or 文字で格納する文字列を区切ることができます。
つまり、SEPARATED BYの後に指定した変数に「-(ハイフン)」が格納されている場合。
CONCATENATE `I` `have` `a` `pen` INTO A1 SEPARATED BY `-`.
こちらの結果は「I-have-a-pen」となります。ハイフンでSEPARATEDされるということです。
ちなみに、ブランクでSEPARATEしたい場合は
CONCATENATE `I` `have` `a` `pen` INTO A1 SEPARATED BY space.
このように記述します。結果は、ブランクで区切るため「I have a pen」となります。
これで、SEPARATE命令について網羅的に理解することができました。基本的には難しい構文ではありませんので、このページの内容を忘れないように何度か復習しておきましょう。