カテゴリ: COBOL 更新日: 2025/11/01

COBOLのNUMERICクラス条件を完全ガイド!初心者でもわかる数値チェックの基本

NUMERICクラス条件で数値チェックを行う方法
NUMERICクラス条件で数値チェックを行う方法

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

生徒

「先生、COBOLで文字が数字かどうかを調べる方法ってありますか?」

先生

「はい、ありますよ。COBOLではNUMERICクラス条件という仕組みを使えば、簡単に数値チェックができます。」

生徒

「数値チェックって、たとえば入力が数字だけかどうかを確認することですか?」

先生

「その通りです!では、実際にNUMERICを使った数値チェックの方法を見ていきましょう。」

1. NUMERICクラス条件とは?

1. NUMERICクラス条件とは?
1. NUMERICクラス条件とは?

NUMERICクラス条件とは、COBOLで「そのデータがすべて数字(0〜9)で構成されているかどうか」を判定するための条件です。たとえば、「123」なら数字ですが、「12A」や「1-2」は数字ではありません。

この機能を使えば、ユーザーが入力した値が本当に数値かどうかを自動でチェックできます。入力ミスを防ぐのにとても便利なんです。

2. NUMERICの基本構文

2. NUMERICの基本構文
2. NUMERICの基本構文

構文はとても簡単で、IF 変数 IS NUMERICと書くだけです。もし変数の中身がすべて数字なら真(true)となり、そうでなければ偽(false)になります。


IF 変数名 IS NUMERIC
    DISPLAY "これは数値です。"
ELSE
    DISPLAY "これは数値ではありません。"
END-IF

実際の例を見てみましょう。


DATA DIVISION.
WORKING-STORAGE SECTION.
01  WS-INPUT    PIC X(5).

PROCEDURE DIVISION.
    MOVE "123" TO WS-INPUT
    IF WS-INPUT IS NUMERIC
        DISPLAY "数値です!"
    ELSE
        DISPLAY "数値ではありません!"
    END-IF
    STOP RUN.

数値です!

このように、"123"は数字だけなので「数値です!」と表示されます。

3. 数字以外を入れるとどうなる?

3. 数字以外を入れるとどうなる?
3. 数字以外を入れるとどうなる?

今度は、数字以外の文字を入れてみましょう。


MOVE "12A" TO WS-INPUT
IF WS-INPUT IS NUMERIC
    DISPLAY "数値です!"
ELSE
    DISPLAY "数値ではありません!"
END-IF

数値ではありません!

「A」が混ざっているため、COBOLはこの文字列を「数値ではない」と判断します。つまり、NUMERIC条件は非常に正確に数字チェックをしてくれるのです。

4. NUMERICが使えるデータ型に注意

4. NUMERICが使えるデータ型に注意
4. NUMERICが使えるデータ型に注意

NUMERICクラス条件を使えるのは、数字として扱える項目(PIC 9やPIC X)に限られます。つまり、データ項目が文字型(PIC X)でも、内容が数字であれば判定できますが、定義自体がアルファベット専用(PIC Aなど)の場合は注意が必要です。

たとえば、次のようなデータ項目があったとします。


01  WS-NUM1   PIC 9(3).
01  WS-CHAR1  PIC X(3).

WS-NUM1は数値型の変数、WS-CHAR1は文字型の変数です。どちらもNUMERICを使ってチェックできますが、判定の仕方に違いがあります。

たとえば次のように書くと、どちらも動作します。


MOVE "123" TO WS-NUM1
IF WS-NUM1 IS NUMERIC
    DISPLAY "WS-NUM1は数値です。"
END-IF

MOVE "12A" TO WS-CHAR1
IF WS-CHAR1 IS NUMERIC
    DISPLAY "WS-CHAR1は数値です。"
ELSE
    DISPLAY "WS-CHAR1は数値ではありません。"
END-IF

WS-NUM1は数値です。
WS-CHAR1は数値ではありません。

このように、NUMERICは入力値が「本当に数字だけで構成されているか」を判定してくれます。

5. マイナスや小数点はどう判定される?

5. マイナスや小数点はどう判定される?
5. マイナスや小数点はどう判定される?

ここで注意したいのが、マイナス(−)や小数点(.)を含む場合です。実は、COBOLのNUMERICは「0〜9の数字だけ」で構成されているかを判定します。そのため、-12312.3NUMERICでは数値ではないと判定されます。

次の例を見てみましょう。


MOVE "-123" TO WS-INPUT
IF WS-INPUT IS NUMERIC
    DISPLAY "数値です。"
ELSE
    DISPLAY "数値ではありません。"
END-IF

数値ではありません。

このように、符号(−や+)や小数点を含む場合は、別の方法でチェックする必要があります。たとえば、INSPECT文やFUNCTION NUMVALを組み合わせて、より柔軟に判定する方法もありますが、まずはNUMERICで基本を押さえましょう。

6. IF文と組み合わせて安全な入力チェック

6. IF文と組み合わせて安全な入力チェック
6. IF文と組み合わせて安全な入力チェック

実際のプログラムでは、ユーザーが入力した値が数値かどうかを調べて、正しければ次の処理に進む、という流れがよくあります。NUMERICクラス条件は、そのような場面で非常に役立ちます。

たとえば、年齢を入力させるプログラムを考えてみましょう。


DATA DIVISION.
WORKING-STORAGE SECTION.
01  WS-AGE    PIC X(3).

PROCEDURE DIVISION.
    MOVE "25" TO WS-AGE
    IF WS-AGE IS NUMERIC
        DISPLAY "入力は数値です。年齢チェックを続けます。"
    ELSE
        DISPLAY "数値以外が入力されています。"
    END-IF
    STOP RUN.

入力は数値です。年齢チェックを続けます。

もしここで「2A」などを入力した場合は、「数値以外が入力されています。」と表示されます。このように、ユーザー入力を安全に扱うための第一歩として、NUMERICクラス条件は非常に重要です。

7. NOT NUMERICで逆チェックもできる

7. NOT NUMERICで逆チェックもできる
7. NOT NUMERICで逆チェックもできる

NUMERICの反対の条件として、NOT NUMERICも使えます。つまり、「数字ではない場合」に実行したい処理を書くことができます。


IF WS-INPUT IS NOT NUMERIC
    DISPLAY "入力値が不正です。"
END-IF

「数字ではないときにエラーを出す」「再入力を求める」など、実際の業務システムで非常によく使われます。

8. まとめるとNUMERICは「安全なプログラム作りの基本」

8. まとめるとNUMERICは「安全なプログラム作りの基本」
8. まとめるとNUMERICは「安全なプログラム作りの基本」

NUMERICクラス条件は、COBOLで文字列が数値かどうかをチェックするためのとても重要な仕組みです。エラーを防ぎ、入力データの品質を保つための基礎的なテクニックです。

数値チェックを正しく使いこなすことで、より信頼性の高いCOBOLプログラムを作ることができます。初心者の方も、ぜひこの機能を覚えておきましょう!

カテゴリの一覧へ
新着記事
C#で複数ファイルをまとめて操作する方法(foreach・LINQ)をやさしく解説!
C#のインターフェースとは?クラス設計を柔軟にする基本技術
C#のコンストラクタの役割と使い方!オブジェクト初期化の基本
COBOLでデータベース接続を理解しよう!初心者でもわかる基本の考え方
人気記事
No.1
Java&Spring記事人気No1
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.2
Java&Spring記事人気No2
C#で型を調べる方法!GetType()・typeof演算子の違いと使い方
No.3
Java&Spring記事人気No3
C#の数値型をマスターしよう!int・double・decimalの違いと使い方
No.4
Java&Spring記事人気No4
COBOLのCOPY句の使い方を完全ガイド!初心者でもわかる共通部品の再利用方法