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

COBOLのMULTIPLY・DIVIDE文を完全ガイド!初心者でもわかる掛け算と割り算の基本と活用例

MULTIPLY・DIVIDE文の基本と活用例
MULTIPLY・DIVIDE文の基本と活用例

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

生徒

「先生、COBOLで掛け算や割り算をするにはどうすればいいですか?」

先生

「COBOLでは、掛け算にはMULTIPLY文、割り算にはDIVIDE文を使います。英語の単語の意味そのままで、とてもわかりやすいですよ。」

生徒

「なるほど!でも実際にはどんなふうに書くんですか?」

先生

「それでは、COBOLでの掛け算と割り算の基本的な書き方と注意点を、わかりやすく見ていきましょう。」

1. MULTIPLY文とは?掛け算の基本をマスターしよう

1. MULTIPLY文とは?掛け算の基本をマスターしよう
1. MULTIPLY文とは?掛け算の基本をマスターしよう

COBOLで数値の掛け算(乗算)を行う際に使用するのがMULTIPLY文です。英語の「multiply(掛ける)」という言葉通り、直感的で読みやすい命令文となっています。

プログラミング未経験の方でも、算数の「×(かける)」をMULTIPLYBYに置き換えるだけと考えれば非常に簡単です。まずは最もシンプルな基本形を見てみましょう。


MULTIPLY 数値1 BY 数値2.

この構文の最大の特徴は、「計算結果が BY の後ろにある変数に上書きされる」という点です。つまり、上記の書き方では「数値2 × 数値1」が計算され、もともと数値2に入っていた値は消えて、計算後の新しい値に書き換わります。

▶ プログラミング初心者向けの簡単な例

例えば、1個120円のリンゴを3個買ったときの合計金額を計算するプログラムを考えてみましょう。未経験の方でも、以下のコードの流れを追うだけで仕組みが理解できるはずです。


IDENTIFICATION DIVISION.
PROGRAM-ID. MULTIPLY-SAMPLE.

DATA DIVISION.
WORKING-STORAGE SECTION.
* 商品の単価を格納する変数(4桁の数字)
01 PRICE    PIC 9(4) VALUE 120.
* 購入個数を格納する変数(3桁の数字)
01 QUANTITY PIC 9(3) VALUE 3.

PROCEDURE DIVISION.
    * QUANTITY(3)に PRICE(120)を掛けて、結果をQUANTITYに保存する
    MULTIPLY PRICE BY QUANTITY.

    DISPLAY "計算が終わりました。"
    DISPLAY "掛け算の結果(合計金額)は " QUANTITY " 円です。"
    STOP RUN.

計算が終わりました。
掛け算の結果(合計金額)は 360 円です。

【詳しく解説】コードのポイント

  • 変数の上書き: この例では QUANTITY(個数)という変数に、計算結果である 360 が代入されています。元の「3」という数値は消えてしまうため注意が必要です。
  • 読みやすさ: MULTIPLY PRICE BY QUANTITY は英語で「単価によって個数を掛け算する」と読めるため、事務処理の内容がコードから推測しやすくなっています。
  • 桁数の定義: PIC 9(4) は「数字4桁が入る箱」という意味です。計算結果がこの桁数を超えないように設計するのが、COBOLで正しく計算を行うコツです。

このように、単純な掛け算であれば非常に短い記述で処理できるのがMULTIPLY文のメリットです。

2. GIVINGを使って結果を別の変数に入れる

2. GIVINGを使って結果を別の変数に入れる
2. GIVINGを使って結果を別の変数に入れる

COBOLで計算を行う際、もっとも安全で頻繁に使われるのがこのGIVING(ギビング)句を使った書き方です。英語の「Give(与える)」の通り、計算した結果を特定の変数に「渡してあげる」イメージです。

最大の特徴は、計算に使った元の数値(変数)を壊さずに、結果だけを新しい箱に保存できる点にあります。これはデータの正確性が求められる事務処理計算において、非常に重要なポイントです。


MULTIPLY 数値1 BY 数値2 GIVING 結果を格納する変数.

▶ 実際の例:お買い物計算

例えば、150円のお菓子を2個買ったときの「合計金額」を計算してみましょう。未経験の方でも分かりやすいように、身近な言葉を変数名にしています。


IDENTIFICATION DIVISION.
PROGRAM-ID. MULTIPLY-GIVING-SAMPLE.

DATA DIVISION.
WORKING-STORAGE SECTION.
* 単価をいれる変数(4桁)
01 TANKA    PIC 9(4) VALUE 150.
* 個数をいれる変数(3桁)
01 KOSU     PIC 9(3) VALUE 2.
* 計算結果をいれる専用の変数(5桁)
01 GOUKEI   PIC 9(5) VALUE 0.

PROCEDURE DIVISION.
    * TANKAとKOSUを掛けた結果をGOUKEIに代入します
    MULTIPLY TANKA BY KOSU GIVING GOUKEI.

    DISPLAY "単価:" TANKA "円"
    DISPLAY "個数:" KOSU "個"
    DISPLAY "--------------------"
    DISPLAY "合計金額は " GOUKEI " 円です。"
    STOP RUN.

実行結果


単価:0150円
個数:002個
--------------------
合計金額は 00300 円です。

▶ なぜ GIVING を使うのが「おすすめ」なの?

プログラミングの世界では、一度使った数値を後から別の計算で再利用することがよくあります。GIVINGを使わない場合、元の変数の値が書き換わってしまうことがありますが、GIVINGを使えば「元の値(単価や個数)」をそのまま保持したまま、「新しい値(合計)」を作成できます。

このように、計算の「入力」と「出力」を明確に分ける書き方は、プログラムのバグを防ぐための基本であり、現場のエンジニアも推奨する「安全なコード」の第一歩です。

3. DIVIDE文とは?割り算の基本と書き方をマスターしよう

3. DIVIDE文とは?割り算の基本と書き方をマスターしよう
3. DIVIDE文とは?割り算の基本と書き方をマスターしよう

次に、COBOLで「割り算」を行うためのDIVIDE文を解説します。英語の「divide(分割する・割る)」という言葉の通り、計算機としての基本機能の一つです。

COBOLの割り算にはいくつかの書き方がありますが、まずは最もシンプルでよく使われる「INTO」を使った基本形を覚えましょう。

基本の構文:
DIVIDE A INTO B.(B ÷ A の計算が行われ、結果はBに上書きされます)

プログラミング未経験の方が一番間違いやすいポイントは、「どっちの数字が割られる数なのか」という語順です。INTOの前に置いた数値(割る数)で、後ろの数値(割られる数)を割るというルールになっています。算数の式とは順番が逆に見えることもあるので、注意して確認しましょう。

▶ 初心者向けの簡単なサンプルコード

実際に、合計金額を人数で割る「1人あたりの計算」を例に、プログラムの書き方を見てみましょう。


IDENTIFICATION DIVISION.
PROGRAM-ID. DIVIDE-SAMPLE.

DATA DIVISION.
WORKING-STORAGE SECTION.
* 合計金額(割られる数)
01 TOTAL-AMOUNT PIC 9(4) VALUE 1000.
* 人数(割る数)
01 NUM-PEOPLE   PIC 9(2) VALUE 5.

PROCEDURE DIVISION.
    * 1000 ÷ 5 を計算して、結果をTOTAL-AMOUNTに格納します
    DIVIDE NUM-PEOPLE INTO TOTAL-AMOUNT.

    DISPLAY "計算結果を表示します。"
    DISPLAY "一人あたりの金額は " TOTAL-AMOUNT " 円です。"
    STOP RUN.

▶ 実行結果


計算結果を表示します。
一人あたりの金額は 0200 円です。

▶ 詳しく解説:ここがポイント!

  • 数値の入れ替わりに注意: 上記の例では、TOTAL-AMOUNTの中身が計算結果の「200」に書き換わります。元の「1000」という数値は消えてしまうため、元の値を残しておきたい場合は、別の項目に結果を入れる書き方(GIVINGなど)を使いますが、まずはこの基本形をしっかり身につけましょう。
  • 桁あふれに注意: 計算結果が定義した桁数(今回の場合は9(4))を超えてしまうと、正しい値が表示されません。割り算の結果がどれくらいの大きさになるか予想して、変数のサイズを決めるのがSEO(正確な演算)のコツです。

このように、DIVIDE文はビジネスシーンでの「平均出し」や「在庫の割り振り」などで非常によく使われる命令です。

4. DIVIDE文のGIVINGを使う方法

4. DIVIDE文のGIVINGを使う方法
4. DIVIDE文のGIVINGを使う方法

DIVIDE文でも、GIVINGを使うことで結果を別の変数に格納できます。


DIVIDE 数値1 INTO 数値2 GIVING 結果変数.

または、次のように書くと「数値1 ÷ 数値2」の形になります。


DIVIDE 数値1 BY 数値2 GIVING 結果変数.

このように、INTOBYのどちらを使うかで割る方向が変わります。

▶ 実際の例


IDENTIFICATION DIVISION.
PROGRAM-ID. DIVIDE-GIVING.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TOTAL   PIC 9(4) VALUE 500.
01 PEOPLE  PIC 9(2) VALUE 4.
01 EACH    PIC 9(3).
PROCEDURE DIVISION.
    DIVIDE TOTAL BY PEOPLE GIVING EACH.
    DISPLAY "一人あたり " EACH " 円です。"
    STOP RUN.

一人あたり 125 円です。

DIVIDE文も、GIVINGを使うことで結果を安全に管理できます。

5. 割り算の余りを求める(REMAINDER)

5. 割り算の余りを求める(REMAINDER)
5. 割り算の余りを求める(REMAINDER)

COBOLでは、割り算の余り(あまり)を求めたい場合、REMAINDERを使います。これは「残り」という意味で、割り算の結果の余りを別の変数に格納できます。


DIVIDE 数値1 BY 数値2 GIVING 商変数 REMAINDER 余り変数.

▶ 実際の例


IDENTIFICATION DIVISION.
PROGRAM-ID. DIVIDE-REMAINDER.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TOTAL     PIC 9(4) VALUE 103.
01 PEOPLE    PIC 9(2) VALUE 10.
01 QUOTIENT  PIC 9(3).
01 REM       PIC 9(2).
PROCEDURE DIVISION.
    DIVIDE TOTAL BY PEOPLE GIVING QUOTIENT REMAINDER REM.
    DISPLAY "一人あたり " QUOTIENT " 個、余りは " REM " 個です。"
    STOP RUN.

一人あたり 10 個、余りは 3 個です。

このようにして、商(割った結果)と余りを同時に求めることができます。

6. MULTIPLY・DIVIDE文を使うときの注意点

6. MULTIPLY・DIVIDE文を使うときの注意点
6. MULTIPLY・DIVIDE文を使うときの注意点

COBOLの数値演算は非常に厳密に管理されています。いくつかの注意点を覚えておきましょう。

① 桁あふれ(オーバーフロー)に注意

結果が変数に入りきらない場合、値が壊れたり、プログラムがエラーになることがあります。PIC句の桁数を十分に確保しておきましょう。

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

金額や割合など小数を使いたい場合は、Vを使って小数点位置を定義します。


01 PRICE   PIC 9(3)V9(2) VALUE 12.50.
01 TAX     PIC 9(2)V9(2) VALUE 1.08.
01 RESULT  PIC 9(4)V9(2).
MULTIPLY PRICE BY TAX GIVING RESULT.

これで「12.50 × 1.08 = 13.50」のような小数計算も正しく行えます。

③ INTOとBYを混同しない

DIVIDE文では、「INTO」と「BY」で計算の方向が変わります。INTOは「割られる数 ÷ 割る数」、BYは「割る数 ÷ 割られる数」になります。混同すると結果が全く違ってしまいます。

④ GIVINGを使って安全に結果を保存

元の値を残したいときは、GIVINGで結果を別の変数に入れるようにしましょう。業務プログラムでは、データを壊さない設計がとても大切です。

7. 実務での活用例

7. 実務での活用例
7. 実務での活用例

MULTIPLYDIVIDEは、売上計算・平均値計算・税金の計算などで頻繁に使われます。たとえば「商品の単価×数量=合計金額」「合計÷人数=一人あたり金額」など、日常の計算をそのままプログラムに書けるのがCOBOLの魅力です。

また、COBOLは金融システムや給与計算システムなど、数値の正確さが求められる分野で長く使われてきた言語です。だからこそ、MULTIPLYDIVIDEのような数値演算をしっかり理解することが、COBOLを使いこなす第一歩になります。

まとめ

まとめ
まとめ

ここまで、COBOLにおける算術演算の要であるMULTIPLY文(掛け算)DIVIDE文(割り算)について詳しく解説してきました。COBOLは事務処理計算に特化した設計思想を持っているため、数式を記号(* や /)で書くよりも、英語の構文に近い形で記述するこれらの命令文が非常に重宝されます。特に金融や流通の基幹システムでは、可読性が高く、誰が見ても「何を計算しているのか」が一目でわかるコードが求められるため、MULTIPLYやDIVIDEの使いこなしは必須スキルと言えるでしょう。

今回の学習で最も重要なポイントは、「データの整合性をどう保つか」という点です。COBOLプログラミングにおいては、単に計算結果を出すだけでなく、GIVING句を活用して元の数値を破壊せずに結果を別変数へ格納する手法や、REMAINDER句によって割り算の余りを正確に把握するテクニックが実務レベルでは頻繁に登場します。また、計算対象となる変数の桁数(PIC句)の定義が、そのまま計算精度やエラー(桁あふれ)の防止に直結するというCOBOL特有の厳密さも理解できたのではないでしょうか。

▶ 応用:C#での計算処理との比較

現代的なオブジェクト指向言語であるC#と比較すると、COBOLの記述がいかに文法的であるかがよくわかります。参考までに、同様の計算をC#で行う場合の基本的な実装例を見てみましょう。C#では演算子(* や /)を使用するのが一般的ですが、事務計算などで精度を保つためにはdecimal型を使用するのがセオリーです。


using System;

public class CalculationSummary
{
    public static void Main()
    {
        // 変数の定義
        decimal price = 150m;
        decimal quantity = 2m;
        decimal total = 0m;

        // 掛け算の実行(COBOLのMULTIPLY相当)
        total = price * quantity;
        Console.WriteLine($"合計金額(掛け算): {total} 円");

        // 割り算の実行(COBOLのDIVIDE相当)
        decimal dividend = 500m;
        decimal divisor = 4m;
        decimal quotient = dividend / divisor;
        Console.WriteLine($"一人あたり(割り算): {quotient} 円");

        // 余りの計算
        int totalItems = 103;
        int people = 10;
        int rem = totalItems % people;
        int perPerson = totalItems / people;
        Console.WriteLine($"{perPerson}個ずつ配り、余りは{rem}個です。");
    }
}

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


合計金額(掛け算): 300 円
一人あたり(割り算): 125 円
10個ずつ配り、余りは3個です。

C#では記号を使って簡潔に書けますが、COBOLのMULTIPLYDIVIDEは、文章を読むようにロジックを追えるというメリットがあります。これは大規模な保守開発において、仕様書とコードの乖離を防ぐ大きな助けとなります。

▶ 実務で役立つCOBOL算術演算のチェックリスト

最後に、実務でプログラムを書く際に振り返るべきチェックポイントを整理しました。

  • 受け皿となる変数の桁数は足りているか: 1,000 × 1,000の結果を格納するには、少なくともPIC 9(7)以上の定義が必要です。
  • 四捨五入(ROUNDED)の必要性: 今回は触れませんでしたが、実務ではMULTIPLY ... GIVING ... ROUNDEDのように、端数処理を自動で行う指定が必要な場面が多くあります。
  • ゼロ除算の回避: DIVIDEを使う際は、割る数がゼロにならないよう、事前にIF文でチェックする癖をつけましょう。
  • 符号の扱い: マイナスの値を扱う場合は、定義にS(SIGN)がついているか確認してください。

これらの基本を忠実に守ることで、バグの少ない、信頼性の高いシステムを構築することができます。COBOLの計算命令はシンプルですが、その奥には「正確な事務計算を支える」という誇り高い哲学が流れています。

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

生徒

「先生、ありがとうございました!MULTIPLYDIVIDEの使い方、バッチリ分かりました。特にINTOBYの違いで割る順番が変わるっていうのは、最初は少し混乱しそうでしたが、英語の文章として考えれば自然ですね。」

先生

「その通りです。COBOLは『コモン・ビジネス・オリエンテッド・ランゲージ』の名前通り、ビジネス上の処理を誰もが読みやすいように作られています。だから、数学の式として覚えるよりも、命令文を音読して意味が通じるか確認するのが上達のコツですよ。」

生徒

「なるほど。あと、GIVINGを使うのが推奨される理由もよく分かりました。元のデータをうっかり書き換えてしまうと、後の処理で計算が合わなくなって大変なことになりますもんね。銀行のシステムとかだったら大問題です!」

先生

「鋭いですね。実務では『不変性』、つまり元のデータを守ることが非常に重視されます。また、桁あふれについても注意が必要です。例えば、給与計算で端数が出てしまったときに、それを切り捨てるのか、四捨五入するのかといった細かい仕様も、COBOLなら確実に制御できます。」

生徒

「そういえば、余りを求めるREMAINDERも便利そうですね。在庫管理とかで、ケース単位の出荷とバラの余りを計算する時に使えそうです。」

先生

「その通り!まさに現場で使われている発想です。COBOLは古い言語だと言われることもありますが、こうした数値計算の正確さと安定性は、最新の言語にも負けません。基礎をしっかり固めて、次のステップである条件分岐や繰り返し処理にも挑戦していきましょう。」

生徒

「はい!計算ができるようになると、作れるプログラムの幅が一気に広がってワクワクします。もっと色んな計算パターンを試してみますね!」

カテゴリの一覧へ
新着記事
New1
COBOL
COBOLのEVALUATE文の使い方を完全ガイド!初心者でもわかる多岐選択
New2
C#
C#の拡張メソッドとは?既存クラスに機能を追加する便利技
New3
C#
ASP.NET CoreとC#の例外処理ベストプラクティス!エラーハンドリングの基本と実装方法
New4
Azure
Azure WAFとは?SQLインジェクションやXSSからWebサイトを守る初心者ガイド
人気記事
No.1
Java&Spring記事人気No1
C#
C#のstaticクラスとstaticメソッドの基本と使い方をやさしく解説!
No.2
Java&Spring記事人気No2
C#
C#のWPFとは?XAMLでGUI開発を基礎から完全解説!初心者向けの入門ガイド
No.3
Java&Spring記事人気No3
C#
C# WinForms入門!初心者でも簡単にWindowsアプリを作る方法
No.4
Java&Spring記事人気No4
C#
C#でswitch式を使う方法!C# 8.0以降の新機能を解説
No.5
Java&Spring記事人気No5
COBOL
COBOLのファイルステータス(FILE STATUS)の使い方を完全ガイド!初心者でもわかるエラー処理の基本
No.6
Java&Spring記事人気No6
C#
C#のイベント処理を完全攻略!WinFormsとWPFの基本を解説
No.7
Java&Spring記事人気No7
C#
C#のbool型を完全解説!初心者でもわかるtrueとfalseの基本と使い方
No.8
Java&Spring記事人気No8
C#
C#の文字列を数値に変換する方法(int.Parse・TryParse)をわかりやすく解説!