ABAPをコーディングする上での超基本変数・構造・内部テーブル―SAPのデータオブジェクトの基本について解説します。
内部テーブルも構造(ワークエリア)も変数も、どれもプログラム実行中のみ存在する作業領域(メモリ領域)のことを表すABAP用語。
ABAPはおろかプログラミング自体が初めてという方はこの3つを区別できず結構苦しむ場面も多くあるかと思います。このページでは、変数・構造・内部テーブルの3つの基本知識を理解できるように、初心者の方向けにイメージ図付きで分かりやすく解説します。

これからABAPを勉強する方にとって、絶対に知っておきたい基礎知識ですので、是非最後までご覧ください。
それでは、早速解説を始めます。
前提:メモリ領域とは?
内部テーブル / 構造(ワークエリア) / 変数。
これらは、すべて共通して「プログラム実行中のみ」に存在する一時的なメモリ領域です。分かりやすく説明すると、メモリ領域というのは「メモ帳」のようなものです。

あれやこれやと作業している最中に「あ、これは忘れないで覚えておこう」とか「これは後で使えるように手元にひかえておこう」とか。プログラミングに置き換えれば、計算結果やデータベースから取得したレコードなど、これらを一時的にメモ帳に記入しておき、後からこのメモ帳の内容を画面に表示したりします。
プログラムの中でその役割を担うのが、「内部テーブル」であり「構造」であり「変数」です。ABAPでは、この3つのメモ帳をうまく用いながら様々な処理を行っていきます。
変数・構造・内部テーブルー。それぞれどのような違いがあって、どのように使い分けるか?ここからは、変数 / 構造 / 内部テーブル を具体的に見ていきながらそれぞれの違いについて説明します。
内部テーブル/構造/変数 のイメージ
結論から提示すると、内部テーブル / 構造(ワークエリア)/ 変数のイメージ図は以下の通り。

ABAPerは、変数/構造/内部テーブルといったら、これらのイメージ図が頭に思い浮かびます。ですが、結局のところ違いはたった1つだけで「メモしておけるレコード数が違うだけ」です。1個だけメモできるのが変数で、複数レコードをメモできるのが構造で、複数レコードをExcelのようにメモできるのが内部テーブル。
これらの共通イメージを掴むことが第一歩となります。1つひとつ、深堀しながら解説していきます。
ABAP:変数

変数はExcelで例えると「1つのセル」に相当します。あるいは変数は「箱」のようなイメージです。

変数にはあくまでも1つのレコードしか格納することができません。今日の日付を格納した後に、昨日日付を格納しようとすると上書きされてしまいます。
「変数」という概念は、ABAPだけでなくどのプログラミング言語でも共通する基本知識です。
変数に関する基本的な理解やルールを押さえておきたい方は、是非こちらの記事をご覧ください。
変数の定義方法
DATA (変数名) TYPE (データ型).
変数の定義には、DATA命令を用います。
TYPEオプションの後ろに指定したデータ型を持つ変数が定義されます。データ型として「D:日付型」を指定すれば、日付を格納する変数が宣言されるということです。
DATA Z_DATE TYPE D.
これで、日付情報を入れておく「Z_DATE」という変数をプログラム実行中に存在させることができます。
ABAP:構造

構造はExcelで例えると1行の複数セルに相当します。
「構造」は「ワークエリア」とも呼ばれる場合もあります。例えば、テーブルからデータを1行だけ取り出して処理を行いたい場合。このタイミングで構造を用います。
具体的に言えば、ループ処理では処理の対象とする内部テーブルを1度にすべて処理を実行するのではなく、1行1行別で定義した構造にデータを格納した後に処理を行うのです。
"LOOP" は内部テーブルから「特定のデータを抽出して1レコードずつ処理を行う場合」に利用される命令です。
詳しく知りたい方はこちらの記事をどうぞ。
構造の定義方法
DATA (変数名) TYPE (テーブル名).
構造の定義方法は上記の通り。
(テーブル名)には、標準テーブルの名称(BKPFとかBSEG)、もしくはアドオンテーブルの名称を指定します。
初心者の方は躓きがちなポイント。テーブルをTYPEオプションに指定すると構造が定義されるという点を理解しましょう。
決して、テーブルが定義されるわけではありませんので要注意。
DATA Z_DATE TYPE BKPF.
内部テーブル

内部テーブルは、ご覧の通り複数行の構造です。「テーブル」の名の付く通り、複数のレコードを保持することができるメモリ領域です。
標準テーブルやアドオンテーブルのデータをそっくりそのまま(もしくは条件を絞って)メモしたい、というときに利用することができます。
内部テーブルの定義
DATA (変数名) TYPETABEL OF (テーブル名).
変数・構造と同様DATA命令を用い、TYPEオプションの後ろに「TABLE OF」と記述します。
DATA Z_DATE TYPE TABLE OF BKPF.
構造と内部テーブルの定義はセットで覚えましょう。内部テーブルは、ABAPプログラミングの根幹にかかわる知識で、変数・構造と比較して少しだけ細かい知識も必要になります。
内部テーブルを完全に理解したい!という方は、下記の記事を合わせてご覧ください。
これで、変数・構造・内部テーブルの違いについては何となくイメージを掴むことができたのではないでしょうか。
冒頭でも述べましたが、3つのデータオブジェクトの違いを理解できていないと、ABAPを用いたプログラミング開発は不可能です。必ずマスターしておきましょう。

ABAPを1から勉強したい方は
SAP/ABAPを1から学習したい初心者の方向けに、できるだけ網羅的にABAPが理解できるよう以下ページに知識体系を整理しています。
特に初心者のうちは、どこから学べばよいか?どう勉強すれば良いか?すらわからない状態になりがち。
ある程度の知識を持ったうえで、はじめて実践的な理解へとつながります。
是非、一度ご覧になってみてください。