カテゴリ: COBOL 更新日: 2026/06/07

COBOLのADD・SUBTRACT文の使い方を完全ガイド!初心者でもわかる足し算と引き算の基本

ADD・SUBTRACT文の使い方と注意点
ADD・SUBTRACT文の使い方と注意点

先生と生徒の会話形式で理解しよう

生徒

「先生、COBOLで足し算や引き算をするにはどうすればいいんですか?」

先生

「良い質問ですね。COBOLではADD文とSUBTRACT文を使うことで、数値の足し算や引き算が簡単にできます。」

生徒

「へえ!英語みたいですね。実際にどんなふうに書くんですか?」

先生

「それでは、実際の使い方と注意点を一緒に見ていきましょう。」

1. ADD文とは?COBOLで足し算を行う基本Web

1. ADD文とは?COBOLで足し算を行う基本Web
1. ADD文とは?COBOLで足し算を行う基本Web

COBOLにおけるADD文は、数値同士を足し合わせるための最も基本的な命令です。プログラミング未経験の方でも直感的に理解しやすいよう、英語の「Add A to B(AをBに加える)」という自然な文章に近い形式で記述します。

ADD文の基本構文

最もよく使われる書き方は次の通りです。計算結果は、必ずTOの後に指定した変数(入れ物)に上書き保存されるという点に注目しましょう。


ADD 数値1 TO 変数2.

この命令が実行されると、内部では「変数2 = 変数2 + 数値1」という計算が行われています。つまり、TOの後の変数は、もともと持っていた値に新しい値がプラスされて更新される仕組みです。

【実践】未経験者でもわかるサンプルプログラム

例えば、お買い物で「100円のりんご」を「300円の財布の中身」に加算するシーンをイメージしてみましょう。実際のコードでは以下のようになります。


IDENTIFICATION DIVISION.
PROGRAM-ID. ADD-BASIC-SAMPLE.

DATA DIVISION.
WORKING-STORAGE SECTION.
* りんごの値段(3桁の数字)
01 APPLE-PRICE PIC 9(3) VALUE 100.
* 財布の中のお金(3桁の数字)
01 WALLET      PIC 9(3) VALUE 300.

PROCEDURE DIVISION.
    * 財布の金額にりんごの値段を足す
    ADD APPLE-PRICE TO WALLET.

    DISPLAY "合計金額は " WALLET " 円になりました。"
    STOP RUN.

実行結果:


合計金額は 400 円になりました。

このプログラムでは、ADD APPLE-PRICE TO WALLETという一行で、財布(300円)にりんご(100円)の値を足し、財布の中身を400円に書き換えています。このように、COBOLの計算は事務処理を英語で命令するような感覚で記述できるのが最大の特徴です。まずはこの「足した結果が後ろの変数に入る」という流れをしっかり押さえましょう。

2. SUBTRACT文とは?引き算の基本をマスターしよう

2. SUBTRACT文とは?引き算の基本をマスターしよう
2. SUBTRACT文とは?引き算の基本をマスターしよう

COBOLで数値を引き算したいときに使うのがSUBTRACT(サブトラクト)文です。英語の「subtract(差し引く)」という言葉の通り、ある数値から別の数値を引く役割を持っています。

プログラミング未経験の方でも、この「英語の語順」さえ意識すれば、計算の流れをスムーズに理解できるようになります。まずは基本となる構文を見てみましょう。


SUBTRACT 数値1 FROM 数値2.

この命令は、「数値2 から 数値1 を引いて、その結果を数値2に上書きする」という意味になります。算数で使う「A - B」という書き方とは順序が逆に見えるため、最初は「FROM(〜から)の後ろが引かれる数」と覚えるのがコツです。

それでは、実際のプログラムでどのように動くのか、簡単な例で確認してみましょう。


IDENTIFICATION DIVISION.
PROGRAM-ID. SUBTRACT-SAMPLE.

DATA DIVISION.
WORKING-STORAGE SECTION.
* A(引く数)と B(引かれる数)を定義します
01 A PIC 9(3) VALUE 010.
01 B PIC 9(3) VALUE 030.

PROCEDURE DIVISION.
    * B(30) から A(10) を引きます
    SUBTRACT A FROM B.
    
    DISPLAY "計算結果(Bの値)は " B " です。"
    STOP RUN.

計算結果(Bの値)は 020 です。

このサンプルでは、変数Bの初期値「30」から変数Aの「10」を引き、その結果である「20」が再び変数Bに格納されました。SUBTRACT文を使うと、特に指定がない限り、FROMの後に書いた変数の値自体が計算後の値に書き換わるという点に注目してください。

このように、COBOLでは日常の英文に近い感覚で「何から何を引くか」を記述していきます。位置関係さえマスターすれば、複雑な計算処理も迷わずに書けるようになりますよ。

3. ADD文とSUBTRACT文の応用:GIVINGで結果を別の変数に格納する

3. ADD文とSUBTRACT文の応用:GIVINGで結果を別の変数に格納する
3. ADD文とSUBTRACT文の応用:GIVINGで結果を別の変数に格納する

COBOLで計算を行う際、元の数値を書き換えずに「計算結果だけを新しい変数に保存したい」場面がよくあります。例えば、在庫数から出荷数を引いた「残数」を求めたいとき、元の在庫データはそのまま残しておきたいですよね。

そんな時に役立つのが、GIVING句です。これを使うと、計算結果を特定の変数に「代入」することができます。プログラミング未経験の方でも、「AとBを足して、結果をCに与える(GIVING)」と考えるとイメージしやすいでしょう。

GIVINGを使った基本の書き方

基本的な構文は以下の通りです。TOFROMと組み合わせて使用します。


ADD 10 TO 20 GIVING RESULT.
SUBTRACT 5 FROM 15 GIVING RESULT.

この書き方の最大の特徴は、計算に使った数値(この場合は10や20)は変化せず、RESULTという変数の中身だけが計算結果に書き換わる点にあります。それでは、実際に動作するプログラムで確認してみましょう。


IDENTIFICATION DIVISION.
PROGRAM-ID. GIVING-SAMPLE.

DATA DIVISION.
WORKING-STORAGE SECTION.
* 計算結果を格納するための変数を用意します
01 RESULT PIC 9(4).
01 NUM-A  PIC 9(4) VALUE 100.
01 NUM-B  PIC 9(4) VALUE 50.

PROCEDURE DIVISION.
    * NUM-A(100) と NUM-B(50) を足して RESULT に入れる
    ADD NUM-A TO NUM-B GIVING RESULT.
    DISPLAY "足し算の結果 (100 + 50) :" RESULT.
    DISPLAY "元の数値Aはそのまま:" NUM-A.

    * RESULT(150) から 30 を引いて再度 RESULT に入れる
    SUBTRACT 30 FROM RESULT GIVING RESULT.
    DISPLAY "さらに30を引いた結果:" RESULT.

    STOP RUN.

実行結果は次のようになります。


足し算の結果 (100 + 50) :0150
元の数値Aはそのまま:0100
さらに30を引いた結果:0120

このように、GIVINGを活用することで、元データを保持したまま複雑な計算を段階的に進めることが可能になります。事務処理計算がメインのCOBOLにおいて、帳票出力やログ記録のために計算過程を残しておく手法は、実務でも非常に頻繁に使われる重要なテクニックです。

4. 複数の変数をまとめて計算する

4. 複数の変数をまとめて計算する
4. 複数の変数をまとめて計算する

COBOLでは、複数の数値を一度に加えたり引いたりすることもできます。


ADD A B C TO TOTAL.
SUBTRACT TAX DISCOUNT FROM TOTAL.

このように書くと、A + B + CTOTALに加えたり、TAXDISCOUNTTOTALから引いたりすることができます。計算式を短くまとめられるのが特徴です。

5. ADD文・SUBTRACT文を使うときの注意点

5. ADD文・SUBTRACT文を使うときの注意点
5. ADD文・SUBTRACT文を使うときの注意点

COBOLのADD文とSUBTRACT文を使うときには、いくつかの注意点があります。初心者がつまずきやすいポイントを整理しておきましょう。

① データ型(PIC句)の桁数を確認する

COBOLでは、数値を格納する変数に「PIC句(ピク句)」で桁数を指定します。もし計算結果が桁を超えると、「オーバーフロー(値が大きすぎて入らない)」が発生します。

たとえば、PIC 9(3)だと最大値は999までしか入らないので、それ以上の結果を足すと誤動作する可能性があります。

② 小数を扱うときはVを使う

COBOLでは、小数点を扱いたいときはVを使います。たとえばPIC 9(3)V9(2)なら「999.99」まで扱えます。


01 PRICE     PIC 9(3)V9(2) VALUE 100.50.
01 TAX       PIC 9(3)V9(2) VALUE 5.25.
01 TOTAL     PIC 9(4)V9(2).
ADD PRICE TO TAX GIVING TOTAL.

このようにして、正確な小数計算ができます。

③ FROMとTOを混同しない

ADDでは「TO」、SUBTRACTでは「FROM」を使います。これを間違えると計算結果がまったく違ってしまいます。

「ADD〜TO〜」「SUBTRACT〜FROM〜」という英語の語順で覚えるとミスを防げます。

④ GIVINGを使うと安全に計算できる

特に業務プログラムでは、元の値を上書きしないほうが安全です。GIVINGを使えば、元の変数を壊さずに計算結果だけを新しい変数に保存できます。

6. ADD・SUBTRACTとCOMPUTEの違い

6. ADD・SUBTRACTとCOMPUTEの違い
6. ADD・SUBTRACTとCOMPUTEの違い

COBOLにはCOMPUTE文という、より自由に計算できる命令もあります。実は、ADDSUBTRACTCOMPUTEでも書き換えられます。


ADD A TO B.

COMPUTE B = B + A.

どちらでも同じ結果になりますが、ADDSUBTRACTは「意味が明確で読みやすい」ため、金融システムなどのビジネスプログラムで今もよく使われています。

7. 実務でも役立つCOBOLの数値計算

7. 実務でも役立つCOBOLの数値計算
7. 実務でも役立つCOBOLの数値計算

COBOLは銀行や保険、会計などのシステムで使われることが多いため、数値計算の処理がとても重要です。ADDSUBTRACTを正しく使いこなすことで、売上の合計、在庫の増減、税金の計算など、さまざまなビジネスロジックを正確に表現できます。

また、COBOLの命令文は英語に近い形で書けるため、他のプログラミング言語よりも読みやすく、初心者にも理解しやすいという特徴があります。

まとめ

まとめ
まとめ

今回の記事では、COBOLプログラミングにおける基本中の基本である、数値計算の「ADD文」と「SUBTRACT文」について詳しく解説してきました。プログラミングにおいて計算処理は避けて通れない要素ですが、COBOLの設計思想は「事務処理用」であるため、非常に直感的で英語の文章を読んでいるかのような構文が特徴です。

COBOLの算術演算のポイント再確認

COBOLの計算命令で最も大切なのは、計算後の値がどこに格納されるかを正しく把握することです。ADD文では「TO」の後に続く変数が更新され、SUBTRACT文では「FROM」の後に続く変数から値が引かれ、その結果が保持されます。また、ビジネスロジックを実装する上で非常に強力な味方となるのが「GIVING句」です。これを使うことで、元の数値を破壊することなく、新しい変数に計算結果だけを代入できるため、データの整合性を保ちやすくなります。

さらに、実務においては「複数の項目を一度に計算する」というシーンが多々あります。例えば、商品の単価に複数の手数料を加算する場合や、在庫数から出荷数と不良品数を一括で差し引く場合など、ADDやSUBTRACTの構文を工夫することで、冗長なコードを避けてシンプルに記述することが可能です。

C#との比較で見る計算の考え方

現代的な言語であるC#に慣れている方にとっては、代入演算子(+= や -=)を使わないCOBOLの記述法は少し独特かもしれません。しかし、どちらの言語でも「オーバーフロー」や「精度」の意識は共通して重要です。参考までに、C#で同様の処理を行う場合のコードを見てみましょう。


using System;

class CalculationSample
{
    static void Main()
    {
        // 変数の宣言と初期化
        int price = 1000;
        int tax = 100;
        int discount = 50;

        // 加算処理(ADD TO に相当)
        price += tax;
        Console.WriteLine("消費税加算後の価格: " + price);

        // 減算処理(SUBTRACT FROM に相当)
        price -= discount;
        Console.WriteLine("割引適用後の最終価格: " + price);

        // 新しい変数に結果を格納(GIVING に相当)
        int finalResult = price + 500;
        Console.WriteLine("追加オプション込みの合計: " + finalResult);
    }
}

実行結果は以下のようになります。


消費税加算後の価格: 1100
割引適用後の最終価格: 1050
追加オプション込みの合計: 1550

C#では記号を使って簡潔に書けますが、COBOLは「ADD」「SUBTRACT」「TO」「FROM」という単語を使うことで、仕様書を読んでいるかのような可読性を提供してくれます。これは、大規模な金融システムや公共インフラにおいて、コードの意図を誰もが正確に読み取れるようにするための工夫なのです。

今後の学習に向けて

基本の足し算・引き算をマスターしたら、次は掛け算の「MULTIPLY」や割り算の「DIVIDE」、そして複雑な数式を一気に書ける「COMPUTE」を学習することをおすすめします。特にCOMPUTE文は、今回のADDやSUBTRACTを包括する強力なツールですが、まずは基本の文法をしっかり身につけることが、バグの少ない堅牢なプログラムを書くための第一歩となります。

COBOLは「古い言語」と言われることもありますが、その数値計算の正確さと安定性は今もなお高く評価されています。今回学んだ基礎を大切に、ぜひ実際のプログラムを動かしてその挙動を体感してみてください。

先生と生徒の振り返り会話

生徒

「先生、ADDとSUBTRACTの使い方がだいぶ分かってきました!ADDはTOを使って、SUBTRACTはFROMを使う。まるで英語の構文をそのまま書いているみたいですね。」

先生

「その通りです。COBOLは自然言語に近い形で記述できるように設計された言語ですからね。実際にコードを書いてみて、何か気づいたことはありますか?」

生徒

「はい、SUBTRACTの『FROMの後の値から引く』というルールが、最初は頭の中で逆転しそうになりました。でも、英語で『AをBから引く(Subtract A from B)』と覚えれば、間違えずに済みそうです!」

先生

「素晴らしい気づきですね。言語の背景にあるルールを理解すると定着が早くなります。GIVING句についても使ってみましたか?」

生徒

「使ってみました!元の値を書き換えたくない時にすごく便利ですね。売上データとか、元の数値を残しておきたい計算では必須になりそうです。あと、複数の項目をまとめて計算できるのも、コードがスッキリして良いなと思いました。」

先生

「そうですね。ビジネスプログラムでは大量のデータを扱うので、効率的かつ安全に計算を行う工夫が随所に散りばめられています。次は、小数の扱いやCOMPUTE文についても触れていきましょうか。」

生徒

「はい!もっと複雑な計算もできるようになりたいので、ぜひお願いします!」

先生

「その意気です。では、最後に一つだけ。数値計算をするときは、常に変数の桁数(PIC句)を意識することを忘れないでくださいね。入れ物が小さいと、せっかくの計算結果が溢れてしまいますから。」

生徒

「そうでした、桁あふれ(オーバーフロー)ですね。変数を定義するときからしっかり計算結果を予測して設計するようにします!」

カテゴリの一覧へ
新着記事
New1
COBOL
COBOLのPERFORM WITH TEST AFTERの使い方を完全ガイド!初心者でもわかる繰り返し処理の基本
New2
COBOL
COBOLのPERFORM WITH TEST BEFOREの使い方を完全ガイド!初心者向けループ処理の基本
New3
C#
C#のASP.NETでCORSを設定する方法を完全解説!エラー解決とWebアプリ開発初心者向けガイド
New4
Azure
Azure WAFポリシーの作成と管理を徹底解説!複数リソースで共有する設定術
人気記事
No.1
Java&Spring記事人気No1
C#
C#のstaticクラスとstaticメソッドの基本と使い方をやさしく解説!
No.2
Java&Spring記事人気No2
Azure
Azure SQL Database購入モデル比較!vCoreとDTUの違いと選び方を初心者向けに解説
No.3
Java&Spring記事人気No3
C#
C#のbool型を完全解説!初心者でもわかるtrueとfalseの基本と使い方
No.4
Java&Spring記事人気No4
C#
C#でswitch式を使う方法!C# 8.0以降の新機能を解説
No.5
Java&Spring記事人気No5
C#
C#のWPFとは?XAMLでGUI開発を基礎から完全解説!初心者向けの入門ガイド
No.6
Java&Spring記事人気No6
Azure
Azureストレージの冗長性比較!LRS/GRS/ZRSの選び方とコストの最適解を完全解説
No.7
Java&Spring記事人気No7
C#
C#の文字列を数値に変換する方法(int.Parse・TryParse)をわかりやすく解説!
No.8
Java&Spring記事人気No8
C#
C#のイベント処理を完全攻略!WinFormsとWPFの基本を解説