カテゴリ: COBOL 更新日: 2025/12/25

COBOLのNUMERIC・ALPHABETICをやさしく解説!初心者でも理解できるクラス条件の使い方

NUMERIC・ALPHABETICなどのクラス条件の活用
NUMERIC・ALPHABETICなどのクラス条件の活用

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

生徒

「COBOLで、入力された文字が数字だけなのか、文字だけなのかを調べたいときって、どうするんですか?」

先生

「そういうときには、COBOLの『クラス条件(クラスけんじょう)』を使うんですよ。『NUMERIC』や『ALPHABETIC』がよく使われます。」

生徒

「なんだか難しそうですが、使い方は簡単なんですか?」

先生

「実はとっても簡単なんです。やさしく説明するので、順番に見ていきましょう!」

1. クラス条件(NUMERIC・ALPHABETIC)とは?

1. クラス条件(NUMERIC・ALPHABETIC)とは?
1. クラス条件(NUMERIC・ALPHABETIC)とは?

COBOL(コボル)には、変数の中に入っている値が「数字だけ」なのか「アルファベットだけ」なのかを調べる便利な機能があります。これが「クラス条件」と呼ばれるものです。

具体的には次の2つがよく使われます:

  • NUMERIC(ニューメリック)…数字だけで構成されているか調べる条件
  • ALPHABETIC(アルファベティック)…英字だけで構成されているか調べる条件

この条件を使えば、たとえばユーザーが入力したデータが数字か文字かを簡単に判断できます。

2. NUMERIC(数字だけかをチェック)

2. NUMERIC(数字だけかをチェック)
2. NUMERIC(数字だけかをチェック)

NUMERICは、「そのデータが全部数字(0~9)でできているかどうか」を調べるための条件です。

たとえば、ユーザーが年齢を入力する場面で、数字以外の文字が混じっていないか確認したい場合に使います。

次のサンプルコードを見てみましょう。


IDENTIFICATION DIVISION.
PROGRAM-ID. CHECK-NUMERIC.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 USER-INPUT       PIC X(5).
01 RESPONSE-MESSAGE PIC X(40).

PROCEDURE DIVISION.
    DISPLAY "年齢を入力してください(例:25):" 
    ACCEPT USER-INPUT

    IF USER-INPUT IS NUMERIC
        MOVE "数字だけが入力されました。" TO RESPONSE-MESSAGE
    ELSE
        MOVE "数字以外の文字が含まれています。" TO RESPONSE-MESSAGE
    END-IF

    DISPLAY RESPONSE-MESSAGE
    STOP RUN.

実行結果の例:


    年齢を入力してください(例:25):
    25
    数字だけが入力されました。

このように、IF USER-INPUT IS NUMERIC で、USER-INPUTが数字かどうかを判断できます。

3. ALPHABETIC(英字だけかをチェック)

3. ALPHABETIC(英字だけかをチェック)
3. ALPHABETIC(英字だけかをチェック)

ALPHABETICは、「英字(A~Z、a~z)だけでできているか」を調べます。数字や記号が入っていると判定されません。

たとえば、名前を入力してもらう場面で使えます。


IDENTIFICATION DIVISION.
PROGRAM-ID. CHECK-ALPHABETIC.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 NAME-INPUT       PIC X(10).
01 RESULT-MESSAGE   PIC X(40).

PROCEDURE DIVISION.
    DISPLAY "名前を入力してください(例:TARO):" 
    ACCEPT NAME-INPUT

    IF NAME-INPUT IS ALPHABETIC
        MOVE "英字だけが入力されました。" TO RESULT-MESSAGE
    ELSE
        MOVE "数字や記号が含まれています。" TO RESULT-MESSAGE
    END-IF

    DISPLAY RESULT-MESSAGE
    STOP RUN.

実行結果の例:


    名前を入力してください(例:TARO):
    TARO
    英字だけが入力されました。

ALPHABETICは、英字以外の記号や数字が混じっていると、条件に当てはまりません。

4. 注意!空白(スペース)にも気をつけよう

4. 注意!空白(スペース)にも気をつけよう
4. 注意!空白(スペース)にも気をつけよう

実は、COBOLのクラス条件は「スペース(空白)」もチェックの対象になります。

たとえば、名前に続いて空白が入っているだけでも、ALPHABETICでは「英字だけではない」と判断されてしまいます。

このような場合、入力前に余計なスペースを除去する方法(トリム処理)を使うと便利ですが、それは別の記事で紹介します。

5. クラス条件を使った簡単なバリデーション

5. クラス条件を使った簡単なバリデーション
5. クラス条件を使った簡単なバリデーション

バリデーションとは、「入力されたデータが正しいかどうかを確認する処理」のことです。

たとえば、社員コードは数字だけ、氏名は英字だけといったルールがある場合、NUMERICやALPHABETICでチェックすることで正しい入力を促すことができます。

次のように使うこともできます:


IF EMPLOYEE-CODE IS NOT NUMERIC
    DISPLAY "社員コードは数字で入力してください。"
END-IF

このようにIS NOT NUMERICと書けば、「数字ではない」ことをチェックできます。

6. その他のクラス条件(参考)

6. その他のクラス条件(参考)
6. その他のクラス条件(参考)

今回はNUMERICALPHABETICの基本だけを紹介しましたが、他にもCOBOLには次のようなクラス条件があります。

  • ALPHANUMERIC(アルファニューメリック)…英数字が混ざっていてもOK
  • DBCS(ダブルバイト)…日本語などの全角文字が含まれるかをチェック(環境による)

これらはもう少し上級者向けの内容ですが、COBOLでは入力データの中身をしっかりと確認できるようにたくさんの機能が備わっているのです。

まとめ

まとめ
まとめ

COBOLのプログラムで、ユーザーから入力されたデータが「数字だけで構成されているのか」や「英字のみで構成されているのか」を判定したい場面は多くあります。そのようなときにとても便利なのが、今回学んだ「クラス条件(NUMERIC・ALPHABETIC)」です。NUMERICを使えば、年齢や社員番号などが正しく数値で入力されているかどうかを簡単にチェックできますし、ALPHABETICを使えば、名前などの英字入力の確認に使うことができます。こうしたクラス条件は、IF文と組み合わせて使うことで、入力ミスや不正なデータのチェックが自然に行えるようになり、プログラムの信頼性が格段に上がります。

また、NUMERICやALPHABETICは、単なる確認処理だけでなく、バリデーション(データの妥当性チェック)の基本としても役立ちます。入力された値が正しいかどうかを判断してから次の処理へ進む、という流れをしっかりと組み込むことが、実用的なCOBOLプログラムには欠かせません。とくに、画面入力やバッチ処理などで外部からのデータを受け取る場面では、想定外のデータが入ってくることもあるため、このようなクラス条件を活用した入力チェックは非常に重要です。

サンプルプログラム:社員情報の簡易チェック


IDENTIFICATION DIVISION.
PROGRAM-ID. CHECK-EMPLOYEE-DATA.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 EMPLOYEE-CODE     PIC X(5).
01 EMPLOYEE-NAME     PIC X(10).
01 RESULT-MSG        PIC X(40).

PROCEDURE DIVISION.
    DISPLAY "社員コードを入力してください(例:12345):" 
    ACCEPT EMPLOYEE-CODE

    IF EMPLOYEE-CODE IS NOT NUMERIC
        DISPLAY "社員コードは数字で入力してください。"
    ELSE
        DISPLAY "氏名を入力してください(例:TARO):" 
        ACCEPT EMPLOYEE-NAME

        IF EMPLOYEE-NAME IS ALPHABETIC
            MOVE "登録情報は問題ありません。" TO RESULT-MSG
        ELSE
            MOVE "氏名は英字のみで入力してください。" TO RESULT-MSG
        END-IF

        DISPLAY RESULT-MSG
    END-IF

    STOP RUN.

このように、まず社員コードがNUMERICであるかをチェックし、次に氏名がALPHABETICかを確認するという二段構えの入力チェックが実現できます。とてもシンプルな構造ですが、実際の業務でもこうした入力検証は大変重要な処理のひとつとなります。

注意点としては、ALPHABETICで判定されるのは「英字のみ」のため、スペース(空白)や記号が少しでも含まれると条件に合わなくなってしまう点です。たとえば「TARO␣(タロウ+空白)」や「TARO!」のようなデータはALPHABETICでは「英字だけではない」とされてしまいます。こうした場合には、入力値から余計な文字を取り除く「トリム処理」や「編集処理」などと組み合わせることで、より柔軟な対応が可能になります。

また、COBOLにはALPHANUMERIC(英数字)やDBCS(全角文字)といった他のクラス条件も存在し、さらに幅広いバリデーションに対応できます。たとえばパスワードの確認や、商品コードのチェック、日本語氏名の入力確認など、状況に応じた使い分けが可能です。とはいえ、まずは今回取り上げたNUMERICとALPHABETICを確実に使いこなせるようにすることで、COBOLの入力処理の基本をしっかりと身につけることができます。

初心者の方は、まず手元で簡単なIF文とNUMERIC/ALPHABETICを組み合わせたミニプログラムを作りながら、どういうときに真と判定されるのか、どんなときに偽になるのかを確認してみると良いでしょう。そして実務に近い場面で活用できるよう、習得した知識を徐々に応用していくことが大切です。

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

生徒

「NUMERICとALPHABETICって、最初は難しそうって思ったけど、意外とシンプルでしたね。」

先生

「そうでしょう?使い方さえ覚えてしまえば、入力の確認やチェックにとても役立つんですよ。」

生徒

「社員コードとか名前をチェックする場面で、簡単にバリデーションできるのはすごく便利ですね。」

先生

「実務では入力ミスを防ぐのが大切ですからね。事前にきちんとチェックしておけば、後からエラーで困ることも減ります。」

生徒

「でも空白や記号が入ってるだけでも引っかかるのは意外でした…。今度はスペースを除く方法も学んでみたいです。」

先生

「それは良い視点ですね。次はトリム処理や編集記号との組み合わせもやってみましょう。」

カテゴリの一覧へ
新着記事
New1
C#
C#のデフォルト引数と名前付き引数の使い方を解説!初心者でも安心のやさしい入門
New2
C#
C#のオブジェクト初期化子を完全ガイド!初心者でもわかる便利な使い方
New3
COBOL
COBOLの帳票出力と編集を完全マスター!条件付き表示で分かりやすい書類を作る方法
New4
COBOL
COBOLの帳票出力を完全攻略!数値項目のカンマ・小数点編集例を徹底解説
人気記事
No.1
Java&Spring記事人気No1
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.2
Java&Spring記事人気No2
C#
C#でJSONファイルを読み書きする方法(JsonSerializer・Newtonsoft.Json)
No.3
Java&Spring記事人気No3
C#
C#でswitch式を使う方法!C# 8.0以降の新機能を解説
No.4
Java&Spring記事人気No4
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.5
Java&Spring記事人気No5
C#
C#のLINQクエリ構文の書き方と基本操作をマスターしよう
No.6
Java&Spring記事人気No6
C#
C#のLINQ(リンク)とは?基本概念とデータ操作を初心者向けに徹底解説!
No.7
Java&Spring記事人気No7
C#
C#のCancellationTokenを使ったキャンセル処理を完全ガイド!非同期処理を安全に止める方法
No.8
Java&Spring記事人気No8
C#
C#の非同期処理とUIスレッドをマスター!WPF/WinFormsでアプリが止まる問題を解決