COBOLのMOVE文を完全ガイド!初心者でもわかるデータ移送の基本
生徒
「COBOLで、データを別の場所に移すことってできますか?」
先生
「はい、できますよ。COBOLではMOVE文を使って、データを他の項目にコピーすることができます。」
生徒
「コピーって、どういう場面で使うんですか?」
先生
「例えば、入力された名前を別の変数に記録したり、数値をまとめて管理するために他の場所へ移すときなどに使います。今からわかりやすく説明しますね。」
1. MOVE文とは?COBOLでのデータ移送の基本
COBOLのMOVE文とは、あるデータ項目(変数)から別のデータ項目へ、値をコピー(移送)する命令です。これは、まるで書類の内容を別の用紙に書き写すようなものです。
たとえば、あなたの名前「たなか ゆい」をメモ帳Aに書いて、それをメモ帳Bにも書き写すような操作がMOVE文のイメージです。
MOVE文は、プログラムの中でとてもよく使われる重要な命令のひとつで、データの受け渡しや加工に欠かせません。
2. MOVE文の基本構文
MOVE文の基本的な書き方は以下のようになります。
MOVE 移す値 TO 移される項目
「TO(トゥー)」は英語で「〜へ」という意味なので、「この値をあの場所へ移してね」と命令していると考えると分かりやすいです。
3. MOVE文の具体的なサンプルコード
それでは、実際のCOBOLコードを見てみましょう。ここでは、名前を変数に代入する例を紹介します。
IDENTIFICATION DIVISION.
PROGRAM-ID. MOVE-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NAME-ORIGINAL PIC X(20) VALUE "たなか ゆい".
01 NAME-COPY PIC X(20).
PROCEDURE DIVISION.
MOVE NAME-ORIGINAL TO NAME-COPY
DISPLAY "コピーされた名前: " NAME-COPY
STOP RUN.
実行結果:
コピーされた名前: たなか ゆい
このように、NAME-ORIGINALに入っていたデータが、NAME-COPYに移され、同じ名前が表示されました。
4. MOVE文はデータの「型」に注意!
COBOLでは、データの「型(かた)」に気をつける必要があります。型とは、データが文字なのか数字なのか、あるいはその長さや形式のことです。
例えば、下のような変数があるとします。
01 AGE-SOURCE PIC 9(3) VALUE 25.
01 AGE-TARGET PIC 9(3).
この場合は、MOVE AGE-SOURCE TO AGE-TARGETと書けば、うまく数値がコピーされます。
ただし、型が違うと想定外の動作をすることがあるので注意が必要です。
5. MOVE文は「右から左へ」の動き
初心者の方がよく混乱するポイントに、「どちらからどちらへ移すの?」という疑問があります。
MOVE文では、「右から左に移す」のではなく、英語通りに「左から右へ」と覚えましょう。
つまり、
MOVE "こんにちは" TO GREETING
であれば、「こんにちは」という文字がGREETINGという変数に入るという意味です。
6. MOVE文を使って数値を操作する
次は数値をMOVE文で移す例です。
IDENTIFICATION DIVISION.
PROGRAM-ID. MOVE-NUMBER.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 POINTS-IN PIC 9(3) VALUE 120.
01 POINTS-OUT PIC 9(3).
PROCEDURE DIVISION.
MOVE POINTS-IN TO POINTS-OUT
DISPLAY "得点(コピー後): " POINTS-OUT
STOP RUN.
実行結果:
得点(コピー後): 120
このように、数字も文字と同じようにMOVE文でコピーすることができます。
7. MOVE文で使える便利なパターン
MOVE文では、定数(固定の値)もそのまま使うことができます。
たとえば、以下のように直接値を移すことも可能です。
MOVE "OK" TO STATUS
MOVE 100 TO SCORE
このように書くことで、STATUSやSCOREという変数に、すぐに値を設定できます。
8. MOVE文で注意する「桁あふれ」
COBOLでは、変数のサイズ(桁数)に注意しないと「桁あふれ」が起こります。
たとえば、以下のように、受け取る側の変数が小さいと、値が切れてしまいます。
01 MESSAGE-ORIGINAL PIC X(10) VALUE "HELLO WORLD".
01 MESSAGE-COPY PIC X(5).
このとき、
MOVE MESSAGE-ORIGINAL TO MESSAGE-COPY
を実行すると、「HELLO」までしかコピーされません。
このように、変数の大きさは常に意識することが大切です。
9. MOVE文はCOBOLの「コピー役」
MOVE文は、COBOLの中でも特に基本的で、非常によく使われる命令です。文字や数値などのデータを、別の変数にコピー(正確には「移送」)するための文であり、まさにプログラム内の「コピー役」として活躍します。
たとえば、「受付で入力された名前」を「印刷用の変数」に移したり、「計算結果」を「出力用の項目」にコピーしたりと、さまざまな場面で利用されます。データ処理を行うCOBOLの中では、MOVE文が正しく使えることがとても重要です。
初心者の方にとっては、「左側にあるデータを、右側の変数に写すだけ」と聞くと簡単そうですが、実際に書いてみると「どちらが送る側?」「どういう形式で書くの?」と迷うこともあるかもしれません。ですが、構文はとてもシンプルです。
MOVE "こんにちは" TO GREETING
この例では、「こんにちは」という文字列をGREETINGという変数に移す、という意味になります。英語の語順そのままで、「〜を〜に」という命令の流れが理解しやすいですね。
また、もう少し丁寧なサンプルも見てみましょう。
IDENTIFICATION DIVISION.
PROGRAM-ID. COPY-HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 MESSAGE-SOURCE PIC X(10) VALUE "HELLO".
01 MESSAGE-TARGET PIC X(10).
PROCEDURE DIVISION.
MOVE MESSAGE-SOURCE TO MESSAGE-TARGET
DISPLAY "移送後のメッセージ: " MESSAGE-TARGET
STOP RUN.
このコードを実行すると、「HELLO」という文字列が別の変数に移されて表示されます。このように、MOVE文は「入力された値」や「既にあるデータ」を「別の場所で使う」ための橋渡しとして活躍します。
まずは、小さな文字列や数字を別の変数にコピーしてみるところから始めてみると、MOVE文の使い方が自然と身についてきます。
まとめ
COBOLのMOVE文は、プログラム内でデータを移動させる基本的な命令であり、初心者が最初に覚えるべき操作のひとつです。文字列のコピー、数値の代入、定数の設定、グループ項目の移送など、実際の業務システムにおいて頻繁に登場する機能です。特に、帳票出力や計算処理、入力データの整形などでは、MOVE文の正確な使い方が不可欠です。
また、MOVE文はデータの「型(PIC句)」や「桁数(サイズ)」と密接に関係しています。文字列型(PIC X)に数値型(PIC 9)を移す場合や、桁数が異なる変数同士で値を移す場合は、意図しない結果になることもあります。そのため、MOVE文を使う際には、必ず「送る側と受け取る側のPIC構造の確認」が重要になります。
MOVE文は、定数を直接代入する用途でも活用されます。たとえば、初期化や仮の値を設定する場合、「MOVE 0 TO 変数名」や「MOVE '未設定' TO フラグ項目」のように、定数から変数へのデータ移送をシンプルに記述できます。
グループ項目へのMOVEもCOBOLではよく使われます。01レベルで定義したデータの塊ごとに、まとめて別の変数へコピーしたり、逆に個々の項目へ分解して扱ったりすることで、柔軟なデータ操作が可能になります。以下は、グループ項目同士のMOVE例です。
DATA DIVISION.
WORKING-STORAGE SECTION.
01 SOURCE-DATA.
05 NAME PIC X(10) VALUE "山田 太郎".
05 AGE PIC 9(2) VALUE 35.
01 TARGET-DATA.
05 TARGET-NAME PIC X(10).
05 TARGET-AGE PIC 9(2).
PROCEDURE DIVISION.
MOVE SOURCE-DATA TO TARGET-DATA
DISPLAY "名前:" TARGET-NAME
DISPLAY "年齢:" TARGET-AGE
STOP RUN.
このように、MOVE文は「一項目」だけでなく、「グループ単位」での移送にも使えます。グループ名同士を指定すれば、中に含まれる各項目が対応する順番でコピーされる仕組みです。ただし、構造が一致していない場合は予期せぬコピーになるため、項目の順番や型の整合性にも注意が必要です。
MOVE文のもうひとつの利点は、視認性とメンテナンス性の高さです。たとえば、複雑な処理の中で「この変数にはどの値が入るのか」「どこからコピーされたのか」を一目で判断できる構文であるため、大規模なシステムの保守にも役立ちます。COBOLのようにビジネス処理が明確に分かれている言語では、こうした可読性の高さが特に重要です。
また、MOVE文はPERFORMやIF文などの他の命令と組み合わせることで、より柔軟な処理を構築できます。たとえば、「条件によって異なる値をMOVEする」「繰り返しの中でデータを順にコピーする」といった使い方は、実務でも非常によく見られます。以下のような構成です。
IF SALES-AMOUNT > 10000
MOVE "高額" TO SALES-LEVEL
ELSE
MOVE "通常" TO SALES-LEVEL
END-IF
こうした条件分岐との組み合わせにより、MOVE文は単なるコピー以上の役割を担うようになります。「処理の流れの中で、どのようにデータを変化させるか」をコントロールするための基盤となる命令なのです。
最後に、MOVE文を学ぶ上で大切なのは「実際に手を動かして試すこと」です。さまざまな型・桁・値のパターンでMOVEを試し、その結果を観察することで、自然と正しい使い方が身についていきます。COBOLの世界では、「基本命令をどれだけ深く理解しているか」がプログラミング全体のスキルに直結します。ぜひ、MOVE文をきっかけに、他の命令への理解も深めていってください。
生徒
「MOVE文って、単純なコピーだけかと思ってたけど、型や桁によって挙動が変わるんですね。意外と奥が深い…」
先生
「そのとおりです。MOVEは見た目はシンプルですが、COBOLの中でもとても重要な命令なんですよ。」
生徒
「特にグループ項目に対してMOVEできるのが便利ですね。構造さえ揃っていれば、一気にコピーできて時短になります。」
先生
「そうですね。構造の一致を確認しながら使えば、ミスも少なくなりますし、メンテナンス性も高まります。」
生徒
「これからは、値のコピーをするたびにMOVE文の使い方に注意して、しっかり型も意識します!」
先生
「それが一番大切ですね。COBOLは基本命令の理解がすべての基盤になります。じっくり身につけていきましょう。」
理解度のクイズ問題
空欄の★に当てはまる内容を答えてください。
DATA DIVISION.
WORKING-STORAGE SECTION.
01 SRC-TEXT PIC X(10) VALUE "HELLO".
01 DST-TEXT PIC X(10).
01 SRC-NUM PIC 9(3) VALUE 120.
01 DST-NUM PIC 9(3).
PROCEDURE DIVISION.
MOVE SRC-TEXT TO DST-TEXT
MOVE SRC-NUM TO DST-NUM
STOP RUN.