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

COBOLのデータ型変換&MOVE CORRESPONDING完全解説!初心者でもできる編集と移送

データ型の変換と編集(MOVE CORRESPONDINGなど)
データ型の変換と編集(MOVE CORRESPONDINGなど)

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

生徒

「COBOLで、あるデータを別の型に変えたり、同じ名前の項目だけまとめてコピーする方法ってありますか?」

先生

「ありますよ。MOVE文を使ってデータを変換したり、MOVE CORRESPONDINGという命令で同じ構造のデータをまとめて移すことができます。」

生徒

「初心者でもわかるように、やさしく説明してもらえますか?」

先生

「もちろんです!これから基本から一緒に学んでいきましょう。」

1. データ型の変換(型変換)って何?

1. データ型の変換(型変換)って何?
1. データ型の変換(型変換)って何?

COBOLでは、文字型(PIC X)数値型(PIC 9)など、用途ごとに決まったデータ型を使います。型変換とは、ある型で持っている値を、別の型として扱えるように移し替えることです。

たとえば、画面入力やファイルから読み込んだ「123」のような値は文字型で扱われることが多く、そのままでは計算に使えません。このようなときに、数値型へ変換することで、加算や比較ができるようになります。

初心者向け:いちばん簡単な型変換の例


01 STR-VALUE   PIC X(3) VALUE "123".
01 NUM-VALUE   PIC 9(3).
PROCEDURE DIVISION.
    MOVE STR-VALUE TO NUM-VALUE

やさしく解説:
・STR-VALUEは文字型、NUM-VALUEは数値型です。
・MOVE文を使うだけで、COBOLが自動的に文字→数値の変換を行います。
・特別な命令を書かなくても型変換できるのが、COBOLの特徴です。

このように、COBOLではMOVE文が「値のコピー」だけでなく、型変換の役割も担っています。まずは「MOVE=型も一緒に変わることがある」と覚えておくと理解しやすくなります。

2. 型変換のMOVE文の使い方

2. 型変換のMOVE文の使い方
2. 型変換のMOVE文の使い方

型変換の基本はとてもシンプルで、MOVE文で「文字型→数値型」へ移すだけです。入力データは文字として入ってくることが多いので、計算や大小比較をしたいときは、まず数値型へ移し替えるのが定番です。

たとえば、文字列で保存された「1234」を数値として扱いたい場合は、次のように書きます。


01 STR-NUM     PIC X(4) VALUE "1234".
01 INT-NUM     PIC 9(4).
PROCEDURE DIVISION.
    MOVE STR-NUM TO INT-NUM

実はこれだけで、COBOLが自動で型を判断し、文字→数値という型変換を行ってくれます。変換後のINT-NUMは数値なので、足し算・引き算や、>=のような比較にも使えるようになります。

初心者向け:数字じゃない文字が混ざるとどうなる?

注意点として、元の文字列に「12A4」のような数字以外が混ざると、変換結果が想定とずれることがあります。だからこそ、実務では「入力が数字だけか」を意識するのが大切です。

初心者向け:変換できたか確認するミニ例


01 STR-NUM     PIC X(4) VALUE "1234".
01 INT-NUM     PIC 9(4).
PROCEDURE DIVISION.
    MOVE STR-NUM TO INT-NUM
    DISPLAY "STR=" STR-NUM
    DISPLAY "NUM=" INT-NUM

やさしく解説:
・最初に文字列を数値へMOVEしてから、DISPLAYで中身を見ます。
・「文字としての1234」と「数値としての1234」を分けて持てるのがポイントです。
・まずはDISPLAYで確認するクセをつけると、型変換のミスに気づきやすくなります。

3. 文字列の編集(編集記号付きMOVE)

3. 文字列の編集(編集記号付きMOVE)
3. 文字列の編集(編集記号付きMOVE)

COBOLでは、編集用記号を使って、数値を見やすく表示することもできます。例えば「1234」を「1,234」とカンマ付きで出力することができます。


01 SOURCE-NUM    PIC 9(4) VALUE 1234.
01 EDITED-NUM    PIC Z,ZZ9.
PROCEDURE DIVISION.
    MOVE SOURCE-NUM TO EDITED-NUM
    DISPLAY EDITED-NUM

実行すると「1,234」と表示されます。Zはゼロ非表示、カンマは桁区切りという意味です。これが編集機能付きピクチャ句です。

4. MOVE CORRESPONDINGとは?構造化データを一括移送

4. MOVE CORRESPONDINGとは?構造化データを一括移送
4. MOVE CORRESPONDINGとは?構造化データを一括移送

COBOLでは、レコードやテーブルのように、構造化されたデータを扱うことがあります。同じフィールドをまとめて移す命令がMOVE CORRESPONDINGです。

例えば、以下のように部品ごとに名前と年齢を持つ構造があったとします。


01 SRC-RECORD.
   05 NAME         PIC X(10).
   05 AGE          PIC 99.
01 TGT-RECORD.
   05 NAME         PIC X(10).
   05 AGE          PIC 99.

このとき、


MOVE CORRESPONDING SRC-RECORD TO TGT-RECORD

と書くと、SRCの中の同じ名前の項目(ここではNAMEAGE)が一括でTGTにコピーされます。

5. MOVE CORRESPONDINGの便利な使いどころ

5. MOVE CORRESPONDINGの便利な使いどころ
5. MOVE CORRESPONDINGの便利な使いどころ

この命令は、複数のフィールドを一つずつ書く必要がないので、コードが短くなってスッキリします。特にレコードの更新や複製処理で役立ちます。

ただし、フィールド名がずれていたり存在しない場合は、その項目だけ無視されます。構造が全く同じか確認してから使うのがポイントです。

6. 型や編集に注意!使うときのポイント

6. 型や編集に注意!使うときのポイント
6. 型や編集に注意!使うときのポイント
  • 文字列→数値をする場合は、元がちゃんと数字か確認する。
  • 編集記号付きピクチャ句は、表示用で使う。計算には向かない。
  • MOVE CORRESPONDINGを使うときは、構造が揃っているかよくチェック。

7. サンプル:型変換&一括移送

7. サンプル:型変換&一括移送
7. サンプル:型変換&一括移送

以下は、文字列から数値へ移す&構造化レコードを一括移す例です。


01 STR     PIC X(4) VALUE "2025".
01 NUM     PIC 9(4).
01 SRC.
   05 NAME PIC X(10) VALUE "YAMADA".
   05 AGE  PIC 99     VALUE 30.
01 TGT.
   05 NAME PIC X(10).
   05 AGE  PIC 99.
PROCEDURE DIVISION.
    MOVE STR TO NUM
    MOVE CORRESPONDING SRC TO TGT
    DISPLAY NUM
    DISPLAY TGT
    STOP RUN.

まとめ

まとめ
まとめ

COBOLにおけるデータ型変換やMOVE CORRESPONDING命令の使い方は、実務の中でも特に頻出でありながら、初学者にとってはつまずきやすいポイントでもあります。この記事では、文字列から数値への変換や、編集記号付きピクチャ句を活用した表示の工夫、さらに構造化データの一括移送に関する基本と実践例を紹介しました。

型変換では、MOVE文を使うだけで自動的にCOBOLが判断してくれますが、データの中身が正しく数値として認識できることが前提となります。また、編集記号付きピクチャ句(Z,ZZ9など)を使うことで、ユーザに見やすい形でデータを表示する工夫も可能でした。ただし、このような表示専用の項目を計算処理にそのまま用いるとエラーや予期せぬ結果を招くため注意が必要です。

さらに、MOVE CORRESPONDING命令は、同じ構造を持つデータ間での移送処理を効率化できる便利な命令です。たとえば帳票の出力やマスタデータの更新など、大量のフィールドを扱う場面で役立ちます。ただし、フィールド名が完全一致していないと移送されないため、レコード構造の設計段階から名前の統一が重要です。

下記に、復習用のサンプルを示しておきます。

サンプル:編集記号付きの型変換とMOVE CORRESPONDING併用例


01 STR-NUM     PIC X(5) VALUE "04567".
01 INT-NUM     PIC 9(5).
01 EDITED-NUM  PIC Z,ZZZ9.
01 SRC-DATA.
   05 FULL-NAME PIC X(20) VALUE "TANAKA TARO".
   05 AGE       PIC 99     VALUE 28.
01 TGT-DATA.
   05 FULL-NAME PIC X(20).
   05 AGE       PIC 99.

PROCEDURE DIVISION.
    MOVE STR-NUM TO INT-NUM
    MOVE INT-NUM TO EDITED-NUM
    MOVE CORRESPONDING SRC-DATA TO TGT-DATA
    DISPLAY "数値:" INT-NUM
    DISPLAY "編集後:" EDITED-NUM
    DISPLAY "名前:" TGT-DATA
    STOP RUN.

上記の例では、編集記号付きで数値を表示するだけでなく、構造化データのコピーを行うことで、COBOLらしい強力かつ簡潔な記述を実現しています。実務では、日付や金額、住所などのレコードを扱う際にこのような処理が不可欠となるでしょう。

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

生徒

「MOVEって単にコピーするだけかと思ってましたが、型も変換してくれるんですね!」

先生

「そうなんです。COBOLのMOVE文はとても柔軟で、内部的に型変換もこなしてくれます。ただし、正しいデータが入っていないと正しく変換されないので、注意が必要ですね。」

生徒

「編集記号ってちょっと難しかったけど、使うと見た目がすごく整って便利ですね!」

先生

「その通り。Zやカンマを使えば、ゼロを隠したり桁区切りを入れたりできます。帳票印刷やユーザーへの表示にピッタリです。」

生徒

「MOVE CORRESPONDINGは特に便利だなと思いました。構造が揃っていればまとめてコピーできるなんて、すごく時短になりそう。」

先生

「実際のシステム開発では、同じ名前のフィールドを意識してレコード設計するのが基本です。こういったCOBOLの特性を活かすための設計力も身につけていきましょうね。」

生徒

「はい!次はREDEFINESとかも使ってみたいです!」

先生

「いいですね。それもまた強力な機能ですよ。順番にステップアップしていきましょう。」

カテゴリの一覧へ
新着記事
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#のLINQクエリ構文の書き方と基本操作をマスターしよう
No.4
Java&Spring記事人気No4
C#
C#でswitch式を使う方法!C# 8.0以降の新機能を解説
No.5
Java&Spring記事人気No5
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
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でアプリが止まる問題を解決