カテゴリ: COBOL 更新日: 2025/07/18

COBOLのデータ型エラーを徹底解説!初心者でもわかるトラブルの原因と解決方法

データ型エラーの原因とトラブルシューティング
データ型エラーの原因とトラブルシューティング

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

生徒

「COBOLのプログラムを動かそうとしたら、データ型エラーって出たんですけど、何が悪いのかわかりません……」

先生

「データ型エラーはCOBOLでよくあるトラブルのひとつです。初心者の方でも原因がわかれば、ちゃんと解決できますよ。」

生徒

「どうしてそんなエラーが起こるんですか?何に気をつければいいんですか?」

先生

「それでは、COBOLのデータ型エラーの原因と対処法について、わかりやすく解説していきましょう!」

1. データ型エラーとは?

1. データ型エラーとは?
1. データ型エラーとは?

まず最初に「データ型」とは、データの種類のことを表します。たとえば、数字を表す「数値型」や、文字を表す「文字型」があります。

COBOLでは、変数(データを保存する入れ物)を定義するときに、必ず「PIC(ピクチャ)句」という形で、その変数の型とサイズを指定します。

たとえば、


01 NUM-A     PIC 9(4).
01 STR-A     PIC X(4).

このように書くと、NUM-Aは4桁の数字、STR-Aは4文字の文字列(文字の集まり)という意味になります。

データ型エラーは、たとえば「文字列を数字に入れようとした」ような、合わない種類のデータを無理やり入れようとしたときに発生します。

2. データ型エラーが起こる具体例

2. データ型エラーが起こる具体例
2. データ型エラーが起こる具体例

次のようなコードを見てみましょう。


01 NUM-B     PIC 9(3).
01 STR-B     PIC X(3) VALUE "ABC".

PROCEDURE DIVISION.
    MOVE STR-B TO NUM-B

このプログラムでは、文字列「ABC」を数字専用の変数NUM-Bに入れようとしています。

しかし、「ABC」は数字ではありません。そのため、実行時にデータ型エラー(Numeric Conversion Errorなど)が出ることがあります。

3. なぜエラーになるの?コンピューターの気持ちになって考えよう

3. なぜエラーになるの?コンピューターの気持ちになって考えよう
3. なぜエラーになるの?コンピューターの気持ちになって考えよう

人間の感覚では「文字と数字が混ざっていても何となくわかる」かもしれません。でもコンピューターはとても正確で、数字には数字だけ文字には文字だけでなければ混乱してしまいます。

たとえば、数字用の箱に「ABC」という文字を入れようとすると、「これ、どう処理したらいいの?」とコンピューターが困ってしまうのです。

このようなズレが原因でエラーが発生します。

4. データ型エラーを防ぐコツとチェックポイント

4. データ型エラーを防ぐコツとチェックポイント
4. データ型エラーを防ぐコツとチェックポイント
  • 数値型(PIC 9)には、数字だけを入れる
  • 文字型(PIC X)には、どんな文字でも入れられる(ただし数値計算はできません)
  • 変数に入れる前に、データの中身を確認する

簡単なチェック方法として、次のような工夫ができます。


01 INPUT-STR    PIC X(3).
01 CHECK-NUM    PIC 9(3).

PROCEDURE DIVISION.
    DISPLAY "3桁の数字を入力してください:"
    ACCEPT INPUT-STR
    MOVE INPUT-STR TO CHECK-NUM
    DISPLAY "入力された数字は:" CHECK-NUM

このプログラムでは、ユーザーに3桁の数字を入力してもらい、それを数値型に変換して表示します。

でも、もし「ABC」などの文字を入力してしまった場合は、意図しない値になったり、エラーが発生することがあります。

5. 編集付きピクチャ句とデータ型の注意点

5. 編集付きピクチャ句とデータ型の注意点
5. 編集付きピクチャ句とデータ型の注意点

COBOLでは、数字を見やすく表示するための編集付きピクチャ句という機能があります。

たとえば、「0123」という数字を「123」と表示したり、「1,234」のようにカンマ区切りにしたりできます。


01 NUM-VALUE     PIC 9(4) VALUE 1234.
01 DISP-VALUE    PIC Z,ZZ9.

PROCEDURE DIVISION.
    MOVE NUM-VALUE TO DISP-VALUE
    DISPLAY "整形後の値:" DISP-VALUE

整形後の値: 1,234

ただし、この編集付きの項目に、文字列を無理やり入れたり、逆に編集済みの文字列を計算に使おうとすると、型の不一致が原因でデータ型エラーになることがあります。

6. MOVE CORRESPONDING使用時の型ミスにも注意!

6. MOVE CORRESPONDING使用時の型ミスにも注意!
6. MOVE CORRESPONDING使用時の型ミスにも注意!

MOVE CORRESPONDING(同じ名前の項目をまとめてコピーする命令)も、便利な反面、型が合っていないとトラブルの元になります。


01 FROM-REC.
   05 NAME    PIC X(10).
   05 AGE     PIC 99.
01 TO-REC.
   05 NAME    PIC X(10).
   05 AGE     PIC X(2).

PROCEDURE DIVISION.
    MOVE CORRESPONDING FROM-REC TO TO-REC

この例では、AGEの型がFROM-RECは数字(PIC 99)、TO-RECは文字(PIC X(2))になっていて、型が違います

このように、MOVE CORRESPONDINGは便利ですが、項目の型とサイズが一致しているかを必ず確認しましょう。

7. データ型エラーのトラブルシューティング手順

7. データ型エラーのトラブルシューティング手順
7. データ型エラーのトラブルシューティング手順
  • エラーメッセージをよく読む(どの行で何が原因か書いてあることが多い)
  • MOVE文の左右の型とサイズを確認する
  • 数値型に文字列を入れていないか確認
  • 編集付き項目を計算に使っていないかチェック
  • MOVE CORRESPONDINGの項目の型を揃える

データ型エラーは、初心者のうちはとてもよくある間違いです。でも、型を意識して丁寧に確認すれば、すぐに防ぐことができます。

カテゴリの一覧へ
新着記事
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句の使い方を完全ガイド!初心者でもわかる共通部品の再利用方法