三崎レイナ
社会人1年目。新卒でITコンサルティングファームに就職。初配属がSAPプロジェクトにアサインされる。SAPがわからないことだらけで悩んでいたところ、会社の先輩にSAPラボの所長を紹介され、毎週末に所長とSAPのお勉強中!
博士
SAPラボの所長。SAP大好き博士!SAP導入プロジェクトを構想策定~運用保守まであらゆるフェーズを数多く経験。
いまは優しきおじいちゃんだが、プロマネバリバリの時代はかなり怖かったらしい。現在は引退し、SAPの後進育成と啓蒙活動に従事中!
登場人物紹介
三崎レイナ
社会人1年目。新卒でITコンサルティングファームに就職。初配属がSAPプロジェクトにアサインされる。SAPがわからないことだらけで悩んでいたところ、会社の先輩にSAPラボの所長を紹介され、毎週末に所長とSAPのお勉強中!
博士
SAPラボの所長。SAP大好き博士!SAP導入プロジェクトを構想策定~運用保守まであらゆるフェーズを数多く経験。
いまは優しきおじいちゃんだが、プロマネバリバリの時代はかなり怖かったらしい。現在は引退し、SAPの後進育成と啓蒙活動に従事中!
この記事を読むメリット
今回はABAPの数値操作について説明するぞい!
SAPのABAPプログラミングでは、数値の操作は多くの業務処理に欠かせません。この記事では、数値データの扱い方について、基本的なデータ型、よく使われる関数、計算方法、そして便利な関数を紹介します。
新着のSAPフリーランス案件
【CO】
【FI】
【MM】
【SD】
商社向けSAP導入プロジェクト支援
【CO】
【PP】
グループ内新会社設立対応支援
【FI】
BlackLine導入案件支援
【FI】
S/4HANAへのバージョンアップ支援(Jrコンサル可)
【PP】
メーカー向けSAP移行プロジェクト支援
【MM】
【SD】
製造業向けロジ領域の運用保守支援
【BASIS】
【MM】
【SD】
製造業向け運用保守支援支援
【CO】
【FI】
【MM】
【PP】
【SD】
大手メーカー社向けSAP導入支援
【FI】
商社向け基幹システムバージョン支援
【FI】
SAP運用業務支援
ABAPには、数値を表すためのデータ型がいくつかあります。以下がよく使われるものです。
データ型 | 意味 | 有効項目長 | 範囲・精度 |
---|---|---|---|
I(Integer) | 整数型 | 固定長(4バイト) | -2,147,483,648 ~ 2,147,483,647 |
P (Packed Decimal) | パック形式の小数型 | 可変長(桁数に応じて変動) | 小数点以下最大14桁の精度 |
F (Floating-point number) | 浮動小数点型 | 固定長(8バイト) | 約15桁の精度 |
ABAPで数値操作を行うための基本的な演算子(加算・減算・乗算・除算)と、計算を簡潔にする文法について解説します。
加算には演算子 + または ADD命令 が使用されます。
DATA: num1 TYPE I VALUE 10,
num2 TYPE I VALUE 3,
result TYPE I.
* 演算子を使った加算(num1とnum2を加算する)
result = num1 + num2. " 結果: 13
* 計算命令を使った加算(resultにnum1を加算する)
ADD num1 TO result. " 結果: 23
このプログラムでは、最初に num1 と num2 を加算し、次に result にさらに num1 を加算しています。最初の result が13で、加算後は 23 となります。
減算には演算子 – または SUBTRACT命令 が使用されます。
DATA: num1 TYPE I VALUE 10,
num2 TYPE I VALUE 3,
result TYPE I.
* 演算子を使った減算(num1からnum2を減算する)
result = num1 - num2. " 結果: 7
* 計算命令を使った減算(resultからnum2を減算する)
SUBTRACT num2 FROM result. " 結果: 4
このプログラムでは、まず num1 から num2 を減算し、その後に result からさらに num2 を減算しています。結果は 4 です。
乗算には演算子 * または MULTIPLY命令 が使用されます。
DATA: num1 TYPE I VALUE 10,
num2 TYPE I VALUE 3,
result TYPE I.
* 演算子を使った乗算(num1とnum2を乗算する)
result = num1 * num2. " 結果: 30
* 計算命令を使った乗算(resultとnum2を乗算する)
MULTIPLY result BY num2. " 結果: 90
このプログラムでは、最初に num1 と num2 を乗算し、その後 result に再度 num2 を掛けています。最終的な結果は 90 です。
除算には演算子 / または DIVIDE命令 が使用されます。
/ 演算子、DIVIDE命令は小数を含む結果を返します。
DATA: num1 TYPE I VALUE 10,
num2 TYPE I VALUE 3,
result TYPE I.
* 演算子を使った除算(num1をnum2で除算する)
result = num1 / num2. " 結果: 3.33333…
* 計算命令を使った除算(resultをnum1で除算する)
DIVIDE result BY num2. " 結果: 1.11111…
このプログラムでは、まず num1 を num2 で除算し、その後 result を num2 で再度割っています。DIVIDE 命令も小数を含む結果を返します。
整数除算には DIV 演算子が使用されます。
小数部分は切り捨てられ、整数の結果が返されます。
DATA: num1 TYPE I VALUE 10,
num2 TYPE I VALUE 3,
result TYPE I.
* 整数除算(num1をnum2で除算する)
result = num1 DIV num2. " 結果: 3
このプログラムでは、num1 を num2 で割った整数部分が返されます。小数部分は無視されます。
剰余計算には MOD 演算子が使用されます。これは、割り算の余りを返します。
DATA: num1 TYPE I VALUE 10,
num2 TYPE I VALUE 3,
result TYPE I.
* 剰余(num1をnum2で除算して余りを格納する)
result = num1 MOD num2. " 結果: 1
このプログラムでは、num1 を num2 で割った余りが返されます。
SUM 命令は、内部テーブル内の数値フィールドの合計値を計算するために使用されます。LOOP 処理内で使用すると、対象フィールドの値を自動的に集計します。
DATA: BEGIN OF itab OCCURS 0,
key TYPE I,
field1 TYPE I,
END OF itab.
* データの登録
itab-key = 1. itab-field1 = 10. APPEND itab.
itab-key = 1. itab-field1 = 20. APPEND itab.
itab-key = 2. itab-field1 = 30. APPEND itab.
itab-key = 2. itab-field1 = 40. APPEND itab.
* 合計計算
LOOP AT itab.
AT END OF key.
SUM. " 同じ key の field1 の合計値を計算
WRITE: / 'Key:', itab-key, 'Sum:', itab-field1.
ENDAT.
ENDLOOP.
このプログラムでは、LOOP 処理中に AT END OF key を使用して key ごとにデータをグループ化しています。SUM 命令は、同じ key を持つすべてのレコードの field1 を自動的に合計し、最後のレコードにその結果を反映します。この場合、key = 1 の合計は 30、key = 2 の合計は 70 です。
他にも、内部テーブルにレコードを追加すると同時に、キーが一致する場合に数値フィールドを自動的に集約(合計)するCOLLECT 命令があるぞい。
ABAPには、数値操作のための便利な関数もいくつかあります。以下はその一部です。
ABS関数は、数値の絶対値を取得します。負の値の場合は正の値に変換されます。
DATA: lv_value TYPE I VALUE -15,
result TYPE I.
result = abs( lv_value ). " 結果は 15
このプログラムでは、変数 lv_value に初期値として -15 が設定されています。ABS 関数を使用することで、負の値が正の値に変換され、結果は 15 となります。
CEIL関数は、数値を最も近い整数に切り上げます。
DATA: lv_value TYPE F VALUE '3.14',
result TYPE I.
result = ceil( lv_value ). " 結果は 4
このプログラムでは、変数 lv_value に 3.14 が設定されています。CEIL 関数を使用すると、3.14 は最も近い整数である 4 に切り上げられます。
FLOOR関数は、数値を最も近い整数に切り捨てます。
DATA: lv_value TYPE F VALUE '3.99',
result TYPE I.
result = floor( lv_value ). " 結果は 3
このプログラムでは、変数 lv_value に 3.99 が設定されています。FLOOR 関数を使用すると、小数点以下が切り捨てられ、結果は 3 になります。
TRUNC関数は、小数点以下を切り捨てて整数部分のみを返します。
DATA: lv_value TYPE F VALUE '7.68',
result TYPE I.
result = trunc( lv_value ). " 結果は 7
このプログラムでは、変数 lv_value に 7.68 が設定されています。TRUNC 関数を使用することで、小数点以下が切り捨てられ、結果は 7 となります。
ROUND関数は、指定した小数点以下の桁数に四捨五入します。
DATA: lv_value TYPE P DECIMALS 2 VALUE '3.456',
result TYPE F.
result = round( val = lv_value dec = 1 ). " 結果は 3.5
このプログラムでは、変数 lv_value に 3.456 が設定されています。ROUND 関数を使用して、小数点第1位に四捨五入され、結果は 3.5 になります。
ABAPでは、フォーマット指定で数値の出力を見やすく整形できます。通貨や桁区切りを指定することで、ユーザーにとっても見やすい表示が可能です。
DATA: lv_value TYPE P DECIMALS 2 VALUE '1234.5678'.
WRITE: / lv_value. " 出力は 1234.57
このプログラムでは、lv_value の値が小数点以下2桁に丸められて表示されます。結果は 1234.57 となります。
ループ処理でカウンタを増加させることはよく行われます。
DATA: counter TYPE I VALUE 0.
DO 10 TIMES.
ADD 1 TO counter.
ENDDO.
WRITE: / counter. " 結果は 10
このプログラムでは、DO 10 TIMES ループが10回繰り返されるたびに、カウンタが1ずつ増加します。最終的な結果は 10 となります。
浮動小数点の計算では、丸め誤差が生じることがあります。桁数を指定することで、精度を管理します。
DATA: result TYPE P DECIMALS 2 VALUE '0'.
result = 10 / 3.
WRITE: / result. " 出力は 3.33
このプログラムでは、10を3で割った結果が小数点第2位まで表示されます。丸められた結果は 3.33 です。
ABAPにおける数値操作は、業務処理において重要な役割を担っています。基本的なデータ型、演算子や計算命令(ADD、SUBTRACT、MULTIPLY、DIVIDE)、そして便利な数値関数を活用することで、効率的で精度の高い数値計算が可能です。適切な操作方法をマスターしましょう!
新着のSAPフリーランス案件
【CO】
【FI】
【MM】
【SD】
商社向けSAP導入プロジェクト支援
【CO】
【PP】
グループ内新会社設立対応支援
【FI】
BlackLine導入案件支援
【FI】
S/4HANAへのバージョンアップ支援(Jrコンサル可)
【PP】
メーカー向けSAP移行プロジェクト支援
【MM】
【SD】
製造業向けロジ領域の運用保守支援
【BASIS】
【MM】
【SD】
製造業向け運用保守支援支援
【CO】
【FI】
【MM】
【PP】
【SD】
大手メーカー社向けSAP導入支援
【FI】
商社向け基幹システムバージョン支援
【FI】
SAP運用業務支援
SAPラボでは、SAPの知識を活かして副業をしたい方を募集してるのじゃ!
SAPラボのライターの特徴
・ライティング初心者OK!
・報酬高単価!
・業務委託契約なので副業として最適!
SAP記事執筆者としての活動実績として利用可能なので、転職時や案件探しの際に企業へのアピール材料にもなります。
募集要項
・SAP導入や運用保守プロジェクトへの参画経験1年以上
ご応募/お問合せ先
info@sap-labo.com
少しでもご興味ある方、ぜひお気軽にご連絡下さい!
新卒でSAPエンジニアとしてABAPでの新規開発や保守業務を担当。
業務内容としてはロジ系(MM/SD)がメインで、ABAPの開発が最も得意。