本ページでは、ABAPコーディングの第1歩である「DATA命令」の使い方・構文ルールについてまとめています。DATA命令は、ABAPにおける「変数」宣言の命令であり、どのようなプログラムでも必ず用いられる理解必須の超・基本命令です。
ABAPのトレーニングでも最初に学ぶ命令。決して難しい内容ではありませんが、初心者の方にとっては「そもそも変数って何?」というような疑問もあるかと思いますので、プログラミングの基礎知識についても合わせて解説を行います。
ABAPerを目指す人であれば、絶対に知っておきたい内容ばかりですので是非最後までご覧ください。
DATA命令とは?
DATA命令とは「変数」を定義する命令です。VBAでいうDim。
プログラミングでいう「変数」とは、何かを入れておく「箱」のようなものです。

プログラムの実際の処理は、極論この「箱」の操作が基本です。数字や文字列などの実際の値を「箱」に格納して、編集したり計算したり、その結果を表示するために利用したりします。

データの操作は必ずこの「変数」を用いて行われます。「変数」を使わないプログラムは存在しません。
変数の基本的な利用方法「宣言」「代入」「参照」については、以下の記事で詳しく解説しております。
ABAPだけではなく、VBAやJavaScriptなど他言語での変数宣言方法も合わせて解説しておりますので、プログラミング初心者の方でもより具体的なイメージを掴めるでしょう。
ここからは実際のコーディングを見ていきます。より具体的なDATA命令の使い方・構文ルールを解説していきます。
構文ルール:DATA命令
DATA (変数名)TYPE(データ型).
DATA LDT_RESULT TYPE C.
DATA:
(変数名1) TYPE (データ型),
(変数名2) TYPE (データ型),
(変数名3) TYPE (データ型).
DATA: LF_1 TYPE STRING, LF_2 TYPE STRING, LS_1 TYPE I.
チェーン命令とは、同じ命令を続けて記述する方法です。特にDATA命令の場合、変数を一度に複数宣言する場合が普通なので、上記のようにチェーン命令の形式で記述することが普通です。
この機会に合わせて理解しておきましょう。チェーン命令など、ABAPにおける基本構文ルールを学びたい方は以下の記事をご覧ください。
解説:DATA命令とTYPEオプション
例として、以下のサンプルコードを用います。
DATA Z_DATETYPE D.
この構文では、「Z_DATE」という「変数」を宣言しています。

この「Z_DATE」という名称は、任意の文字列でOKです。ただし、変数の命名についてはソースコード全体の可読性を高めるためにできるだけわかりやすい名称を指定するようにします。
軽視されがちですが、プログラミングにおいて変数や関数につける名前は非常に重要です。
以下の記事では、変数の命名にスポットライトを当てて命名のコツを解説しています。合わせてご覧ください。
続いて後半の「TYPEオプション」について。
DATA Z_DATE TYPED.
後半の「~TYPE D」は、この変数の仕様(データ型)を決めています。

仕様を決めるとは「この変数にいれるのは、文字列にするのか、日付にするのか」みたいなことです。「D」は日付型を表します。詳しくは、ABAPデータ型を参照ください。
DATAZ_DATE TYPE D.
つまり上記のコードは「Z_DATE」という変数を日付型で宣言するという意味です。たったこれだけのことです。
「Z_DATE」という変数を定義するよ!だけでは変数定義は不完全であり、必ずその変数は「日付」を格納するものだよ!と指定することによってはじめて「変数の定義を行った」ことになる点に注意しましょう。
初心者の方が混乱しがちなのが、TYPES命令とTYPEオプションの違い。先ほどの章で、構文の後半部分の「~TYPE」を説明しましたがよくある間違い・混乱ポイントとなるのが、TYPEとTYPES命令の違いです。両者は似て非なるものであるので、しっかりとした理解・認識が必要になります。
以下のページでは、TYPES命令について詳しく説明しているので、DATA命令を理解しきった後にお読みください。
サンプルコード:DATA命令
実際のプログラムで用いられている実物レベルのサンプルコードを記載しておきます。具体的なイメージを持っておくことが重要です。
DATA: Z_FORM_ID TYPE FORM_ID, "帳票ID Z_SCREE TYPE TYP_W_SCREEN, "選択画面構造 Z_LAYO TYPE Z001_FA0001, "内部テーブル「帳票ID」 Z_BLART TYPE Z001_FA0001, "内部テーブル「会計伝票タイプ」 Z_BLART TYPE RANGE OF BKPF-BLART, "レンジテーブル「伝票タイプ」 Z_BLART2 TYPE RANGE OF BKPF-BLART. "レンジテーブル2「伝票タイプ」
DATA: * 選択画面用 ZZ_RECNNR TYPE VICNCN-RECNNR, "契約コード ZZ_RECNTYPE TYPE VICNCN-RECNTYPE, "契約タイプ * エラー制御 ZZ_COUNT TYPE I, "カウント ZZ_INCNT TYPE I, "処理件数(入力) ZZ_OUTCNT TYPE I, "正常件数(出力) ZZ_ERRCNT TYPE I, "エラー件数 ZZ_CMMTCNT TYPE I. "コミット件数
先ほど変数の宣言は「名前」と「データ型」をセットで行うと説明しました。ただし、実はセットで行わなくても構文ルール的にはエラーとなりません。
例えば以下のような場合。
DATA ZZ_A.
上記のように、TYPEオプションを用いずにDATA命令を利用することも実は可能。TYPEオプションを用いずにDATA命令で宣言した変数は、「データ型 "C" データ長1」になります。
基本は、このような書き方は推奨されません。あくまでも豆知識としてご理解ください。ある現場のプログラムで一度だけ見かけたことがありましたが、かなりレアなものであり、可読性も非常に低くなってしまうため、利用は厳禁です。
@DATA命令―インライン宣言
ABAPも他のプログラミング言語同様に、日々進化し続けています。@DATAで「箱」と「箱の中身」を同時に定義・処理する記述方式があります。
インラインでの変数宣言を詳しく知りたい方は、こちらの記事を是非ご覧ください。
合わせて覚えておきたい:定数定義
DATA命令は、変数を定義する命令でした。
変数と対をなす概念に「定数」があります。これは、プログラム実行中に値が書き換えられない「箱」です。
以下に、定数定義を詳しく解説したページを記載しておきますので、合わせてご覧ください。
ABAPを1から学習したい方は
ABAPを1から学習したい方のために、ABAPに関わる基本知識を1つのページにまとめました。
こちらの記事では、ABAPを用いて簡単な機能を実装できるようにするための必須知識を解説しております。今、本サイトで一番人気の記事ですので是非合わせてご覧ください。