カテゴリ: COBOL 更新日: 2026/02/15

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」とカンマ付きで出力する例を見てみましょう。ポイントは、移し先の項目に編集記号付きのPICを指定しておくことです。


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は「先頭の0を表示しない(ゼロ非表示)」、カンマは「桁区切り」を表します。つまり、同じ数値でも表示専用の見た目に変換できるのが編集記号付きMOVEです。

初心者向け:0が消えるイメージをつかもう


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

やさしく解説:
・元の数値が45でも、編集パターンに合わせて「 45」→表示では「45」のようにスッキリ見せられます。
・編集後の項目は見やすい一方で、表示向けの文字列として扱うのが基本です。
・まずは「編集記号付きPICにMOVEすると、見た目が整う」と覚えると理解が早いです。

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とかも使ってみたいです!」

先生

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

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

COBOLのデータ型変換とは何ですか?

COBOLのデータ型変換とは、文字列として格納された数字などを、数値型のデータとして使えるようにすることです。MOVE文を使えば、文字型から数値型への変換が自動で行われるため、初心者にも扱いやすい仕組みになっています。
カテゴリの一覧へ
新着記事
New1
COBOL
COBOLの文字列検索を完全ガイド!初心者でもわかるINSPECTとUNSTRINGの使い方
New2
C#
C#でXMLバリデーションを完全マスター!XSDスキーマを使ったチェック方法を初心者向けに解説
New3
COBOL
COBOLのEDITING記述子を完全解説!初心者でもわかるPIC Z・\*・\$による整形出力
New4
COBOL
COBOLのJUSTIFIED句を完全マスター!初心者でもわかる文字の右寄せ・左寄せの基本
人気記事
No.1
Java&Spring記事人気No1
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.2
Java&Spring記事人気No2
C#
C#の引数と戻り値の基本!値を受け渡し・返す仕組みを理解しよう
No.3
Java&Spring記事人気No3
C#
C#のstaticクラスとstaticメソッドの基本と使い方をやさしく解説!
No.4
Java&Spring記事人気No4
C#
C#のラムダ式の書き方と構文を初心者向けに完全解説
No.5
Java&Spring記事人気No5
C#
C#のLINQでFirstとFirstOrDefaultの違いと使い方を完全解説!初心者向けガイド
No.6
Java&Spring記事人気No6
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.7
Java&Spring記事人気No7
C#
C#のLINQでOrderByを使った並び替えを完全ガイド!初心者でもわかるソート方法
No.8
Java&Spring記事人気No8
C#
C#で型を調べる方法!GetType()・typeof演算子の違いと使い方