COBOLの算術命令「SUBTRACT」入門!基本から使い方まで徹底解説

2025年4月8日火曜日

COBOL

COBOLのプログラムを書いていて、「引き算くらい簡単でしょ」と思ったら、SUBTRACT命令の構文で軽くつまずいた…なんて経験はありませんか?

この記事では、SUBTRACT命令の基本構文から使い方のコツ、現場でもよく使われる実用例、注意したい落とし穴まで、まるっと解説します。

つまづきやすいポイントを避けつつ、初心者でもサクッと理解できる内容になっているので、「SUBTRACTマスターへの第一歩」を踏み出してみませんか?

この記事で学べること

・SUBTRACT命令の基本的な書き方と動き
・3つの構文パターンと使い分け
・動くサンプルプログラムの紹介
・桁あふれ(オーバーフロー)を防ぐ方法
・実務でよくあるSUBTRACTの使い方

COBOL算術命令SUBTRACTとは?

COBOLで「引き算」をするには、SUBTRACT命令を使います。名前からして、なんとなく意味はわかりやすいですね。

たとえば、在庫の数を減らしたいときや、銀行口座の残高から出金額を引きたいとき。この命令を使えば、スパッと計算できます。

SUBTRACTは、加算命令(ADD)と並んで基本中の基本。使い方を覚えておくと、他の処理もグッと楽になります。

最初は少し戸惑うかもしれませんが、慣れれば簡単。暗算より安心です。

COBOL算術命令SUBTRACTの基本構文

SUBTRACT命令には、書き方にいくつかのパターンがあります。

ここからは、まずよく使われる2つの形式について見ていきましょう。

構文1: SUBTRACT 変数1 FROM 変数2

まず最初に紹介するのは、SUBTRACT 変数1 FROM 変数2という構文です。

SUBTRACT A FROM B.

これは「BからAを引いて、その結果をBに上書きする」という意味になります。

ちょっとイメージしにくいかもしれないので、次の図で見てみましょう。

A = 3  
B = 10  
SUBTRACT A FROM B  →  B = 7(10から3を引いた結果がBに入る)

FROMの後ろの変数が「引かれる数」です。先に書かれているAは「引く数」ですね。

つまり、計算式としては「B - A」のイメージ。ただし、結果がBに入るので、元のBは消えてしまいます。

「あれ?Bが元の値じゃなくなっちゃうの?」と思ったあなた、安心してください。そんなときには次の構文が便利です。

構文2: SUBTRACT 変数1 FROM 変数2 GIVING 変数3

続いて紹介するのが、SUBTRACT 変数1 FROM 変数2 GIVING 変数3という形式です。

SUBTRACT A FROM B GIVING C.

意味は「BからAを引いて、結果をCに入れる」ということ。先ほどの構文との大きな違いは、元の変数(BやA)の値を変えない点です。

A = 3  
B = 10  
SUBTRACT A FROM B GIVING C  →  C = 7(Bは10のまま、Aは3のまま)

計算結果を他の場所に保管しておきたいときに便利です。元のデータを壊さずに、引き算だけ済ませたいときにはピッタリですね。

ちなみに、GIVINGの後ろに書く変数(C)が計算結果の置き場所になります。

何回も同じ変数で計算する場合や、途中経過を記録したいときなどに活躍します。

COBOL算術命令SUBTRACTの使い方

理屈はもうバッチリだと思います。そろそろ、実際に動くプログラムを見てみましょう。

コードを手元で動かしてみると、理解がぐんと深まります。計算の流れもイメージしやすくなりますよ。

サンプルプログラム: 基本的な引き算 (SUBTRACT FROM)

まずは、SUBTRACT命令の基本形「FROM」を使ったシンプルなサンプルです。

IDENTIFICATION DIVISION.
PROGRAM-ID. SUBTRACT-DEMO-1.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 NUM1     PIC 9(3) VALUE 15.
01 NUM2     PIC 9(3) VALUE 30.

PROCEDURE DIVISION.
   SUBTRACT NUM1 FROM NUM2.
   DISPLAY "計算結果(NUM2): " NUM2.
   STOP RUN.

このプログラムを動かすと、次のような表示になります。

計算結果(NUM2): 015

NUM2の初期値30から、NUM1の値15が引かれて、NUM2の中身が15に変わっています。

サンプルプログラムの解説

プログラムの各部分について、順を追って見ていきましょう。

IDENTIFICATION DIVISIONとPROGRAM-IDは、COBOLプログラムの名前を決める場所です。

DATA DIVISIONには、使う変数を定義しています。NUM1NUM2は3桁の数値(PIC 9(3))で、初期値をそれぞれ15と30にしています。

SUBTRACT NUM1 FROM NUM2.が主役の1行です。意味は「NUM2 - NUM1を計算して、結果をNUM2に上書きする」です。

DISPLAY命令は、計算後のNUM2の中身を画面に表示する命令です。ピリオドの位置は文の終わりを示すので、忘れずに。

サンプルプログラム: 結果を別変数へ格納 (GIVING)

次は、SUBTRACT命令にGIVINGをつけて、結果を別の変数に入れるパターンです。

IDENTIFICATION DIVISION.
PROGRAM-ID. SUBTRACT-DEMO-2.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 MINUEND       PIC 9(3) VALUE 50.
01 SUBTRAHEND    PIC 9(3) VALUE 20.
01 RESULT-AREA   PIC 9(3) VALUE 0.

PROCEDURE DIVISION.
    SUBTRACT SUBTRAHEND FROM MINUEND GIVING RESULT-AREA.
    DISPLAY "結果: " RESULT-AREA.
    DISPLAY "MINUENDの値(変更なし): " MINUEND.
    STOP RUN.

このプログラムの実行結果は以下のとおりです。

結果: 030  
MINUENDの値(変更なし): 050

引き算の結果はRESULT-AREAに入り、MINUENDの値はそのまま残っています。

サンプルプログラムの解説

変数名が少し変わりましたが、基本の流れは同じです。

MINUEND(ミヌエンド)は「引かれる数」、SUBTRAHEND(サブトラヘンド)は「引く数」です。英語っぽいですが、慣れると直感的にわかります。

GIVING RESULT-AREAがポイントです。計算結果だけをRESULT-AREAに渡して、元のMINUENDの値には手をつけません

DISPLAYで2つの変数を表示することで、「計算結果は別に保管できる」というGIVING構文の特徴がよくわかると思います。

元の値を残しておきたい場合は、迷わずこのパターンを使いましょう。

COBOL算術命令SUBTRACTのオプションと注意点

SUBTRACT命令はシンプルに見えますが、現場で安心して使うにはちょっとした知識が役立ちます。

ここでは、プログラムの安定性を高めるためのON SIZE ERROR句について紹介します。

桁あふれ(オーバーフロー)が起きたとき、知らぬ間に変な値が入っていた…なんてことを防げます。

ON SIZE ERROR句の使い方と桁あふれ対策

COBOLでは、数値の計算結果が変数の桁数を超えると、予期しない値が入ったり、処理が止まったりします。これを桁あふれ(SIZE ERROR)と呼びます。

たとえば、次のような状況を考えてみてください。

01 NUM-A  PIC 9(2) VALUE 20.
01 NUM-B  PIC 9(2) VALUE 90.

SUBTRACT NUM-B FROM NUM-A.

NUM-Aは2桁までしか入らないのに、「20 - 90」だとマイナス70になります。マイナスは入らないので、データが壊れてしまいます。

そこで登場するのが、ON SIZE ERROR句です。

これは、「もし計算結果が入りきらない場合、こういう処理をしてね」とCOBOLに伝える命令です。

実際の書き方を見てみましょう。

SUBTRACT NUM-B FROM NUM-A
    ON SIZE ERROR
        DISPLAY "計算エラー: 桁あふれが発生しました".

ON SIZE ERRORのブロック内には、エラーメッセージの表示や、再計算の処理などを書けます。

プログラムを安全に動かすには、この構文を覚えておくとかなり安心です。

「桁あふれなんてめったにないでしょ?」と思いがちですが、実際には思わぬ場面で出てくることがあります。

一行加えるだけでミスを防げるなら、使わない手はありません。

【まとめ】COBOL算術命令SUBTRACTをマスターしよう

ここまでSUBTRACT命令の使い方をたっぷり紹介してきました。最後に、要点だけをサクッと振り返っておきましょう。

  • SUBTRACT命令は「引き算」をするための基本命令
  • 構文1:SUBTRACT A FROM B → 結果をBに上書き
  • 構文2:SUBTRACT A FROM B GIVING C → 結果を別の変数Cに格納
  • ON SIZE ERROR句を使えば、桁あふれ時の対策ができる

「SUBTRACTって思ったより奥が深いな」と感じたかもしれません。でも、それだけ現場で使われているということでもあります。

ここまで読んできたなら、もう引き算の達人です。

ADDやMULTIPLYなど、ほかの算術命令にもぜひチャレンジしてみてくださいね。COBOL計算の世界がぐっと広がります。

【関連記事】

>> 今さら聞けない「COBOLとは?」

このブログを検索

  • ()

自己紹介

自分の写真
リモートワークでエンジニア兼Webディレクターとして活動しています。プログラミングやAIなど、日々の業務や学びの中で得た知識や気づきをわかりやすく発信し、これからITスキルを身につけたい人にも役立つ情報をお届けします。 note → https://note.com/yurufuri X → https://x.com/mnao111

QooQ