本ページではABAPのオフセット(Offset)処理について初心者向けに解説します。
オフセット処理を簡単に説明すると対象の文字列の「基準と長さを指定して」文字列を切り取る処理です。

このページでは、ABAP学習中の方向けに、ABAPのオフセット処理を1からわかりやすくサンプルコード付きで解説します。
ABAPerを目指す方であれば頭に入れておきたい基本中の基本知識です。是非最後までご覧ください。
ABAP:オフセット処理(offset)とは
オフセット処理(offset)とは基準とした位置から指定した長さの文字列を指定することです。

↑のように、言葉で説明すると難しく感じてしまいまうので、以下では図解付きで解説していきます。
以下の文字列「あいうえお」を例にオフセット処理を考えます。

オフセット処理の使いどころは、上記の文字列の中から「うえお」を指定して変数を代入したいような場合です。


「あいうえお」の文字から「うえお」を指定して取り出すこと―。これがオフセット処理です。
具体的には冒頭で示した通りオフセット(offset)は「基準とした位置から指定した長さの文字列を指定」します。
以下のように「2(3)」というように表します。

( )の前に基準とする位置を。( )の中に指定の長さを明示します。

文字列の位置は、以下の通り「0」から開始される点に注意しましょう!

オフセットと合わせて図解すると以下のようなイメージです。


基準とする位置を「2」。そこから「3つ」の文字列を指定する例です。
ABAPでのオフセット利用方法
オフセット処理のイメージが付いたところで、ここからは実際にオフセットを利用したサンプルコードを見ていきましょう。
構文ルール:オフセット
変数名+2(4)
変数名の直後に「どこから」「どれぐらいの長さ」かを指定するだけ。非常に簡単です。
サンプルコード:オフセット

下記のサンプルコードは、オフセットを利用した構文です。
DATA: W_YEAR(4) TYPE N VALUE 2020, " 初期値2020 W_MONTH(2) TYPE N VALUE 07, " 初期値07 W_DAY(2) TYPE N VALUE 24, " 初期値24 W_CLD TYPE D. " 初期値なし→ブランク W_CLD+0(4) = W_YEAR. " W_CLD の0番目から4文字は「2020」 W_CLD+4(2) = W_MONTH. " W_CLD の4番目から2文字は「07」 W_CLD+6(2) = W_DAY. " W_CLD の6番目から2文字は「24」 WRITE W_CLD. " 20200724

1行目~5行目は初期値ありの変数定義です。
DATA命令/VALUEオプションについてはこちらの記事をご覧ください。

7行目~9行目はオフセットを利用した代入処理。
11行目で結果を書き出すWRITE命令を利用しています。
また、オフセット処理では代入だけではなく、以下のようにクリア処理なども行うことが可能です。
DATA: W_YEAR(4) TYPE N VALUE 2020, " 初期値2020 W_MONTH(2) TYPE N VALUE 07, " 初期値07 W_DAY(2) TYPE N VALUE 24, " 初期値24 W_CLD TYPE D. " 初期値なし→ブランク W_CLD+0(4) = W_YEAR. " W_CLD の0番目から4文字は「2020」 W_CLD+4(2) = W_MONTH. " W_CLD の4番目から2文字は「07」 W_CLD+6(2) = W_DAY. " W_CLD の6番目から2文字は「24」 CLEAR W_CLD+0(4) " W_CLD の0番目から4文字をクリア→0000 WRITE W_CLD. " 00000724

11行目で変数「W_CLD」の0番目から4文字をCLEARしてるため、最終的な値が「00000724」となります。
CLEAR命令については以下の記事をご覧ください。
以上でABAPのオフセット処理についての解説は終了です。
SAP / ABAPを1から学習したい方は

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