カテゴリ: COBOL 更新日: 2026/06/09

COBOLのEDITING記述子を完全解説!初心者でもわかるPIC Z・\*・\$による整形出力

EDITING記述子(PIC Z, \*, \$など)で整形出力
EDITING記述子(PIC Z, \*, \$など)で整形出力

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

生徒

「先生、COBOLで数字をきれいに表示する方法ってありますか? たとえばカンマを入れたり、前にドルマークを付けたりとか…」

先生

「とても良い質問ですね。COBOLではPIC句の中で“編集記述子(EDITING記述子)”という機能を使って、数字の見た目を整えることができるんです。」

生徒

「編集記述子?なんだか難しそうですね…」

先生

「大丈夫。使い方を覚えれば、誰でも簡単にできるようになりますよ。今日はPIC Z*$などを使って、きれいな数値の整形出力を学びましょう!」

1. EDITING記述子とは?数値を見やすく整える魔法の記号

1. EDITING記述子とは?数値を見やすく整える魔法の記号
1. EDITING記述子とは?数値を見やすく整える魔法の記号

COBOLのEDITING記述子(編集記述子)とは、プログラムが扱う「生のデータ」を、人間が見て理解しやすい「表示用のフォーマット」に変換する仕組みのことです。

プログラミング未経験の方でも、Excelの「セルの書式設定」をイメージすると分かりやすいでしょう。例えば、コンピュータ内部では「0001234」と保持されている数値も、そのままでは読みにくいですよね。編集記述子を使えば、自動でカンマを打つ、先頭の不要なゼロを消す、金額記号を添えるといった整形が、PIC句(ピクチャ句)に記号を書き加えるだけで実現できます。

【初心者向けイメージ例】
内部データ:0012500
編集記述子を適用後:\12,500(一目で金額だとわかります!)

COBOLでよく使われる代表的な編集記述子(記号)には、以下のようなものがあります。

記号 役割(編集機能) 活用シーン
Z ゼロ抑制(先頭の不要な0を空白にする) 出席番号や数量の表示
9 数字(そのまま表示) 桁数を固定したい場合
, コンマ挿入(3桁区切りのカンマを入れる) 売上高や家計簿などの金額
* アスタリスク充填(空白を「*」で埋める) 小切手の不正改ざん防止
$ 通貨記号(先頭にドル記号などを付ける) 海外通貨の請求書出力
+ / - 符号表示(プラス・マイナスの表示) 収支報告や温度計のデータ

もっともシンプルな比較サンプルを見てみましょう。「そのまま表示(9)」と「編集記述子を使った表示(Z)」の違いを確認してください。


IDENTIFICATION DIVISION.
PROGRAM-ID. INTRO-EDITING.
DATA DIVISION.
WORKING-STORAGE SECTION.
* 1. 整形前のデータ(5桁の数字)
01 RAW-DATA       PIC 9(5) VALUE 00123.
* 2. 編集記述子 Z を使った表示用変数
01 EDIT-DATA      PIC ZZZZ9.

PROCEDURE DIVISION.
    * データを表示用変数にコピー(この瞬間に整形される)
    MOVE RAW-DATA TO EDIT-DATA
    DISPLAY "そのまま表示:" RAW-DATA
    DISPLAY "整形して表示:" EDIT-DATA
    STOP RUN.

そのまま表示:00123
整形して表示:  123

このように、PIC句に少し工夫を凝らすだけで、ユーザーにとって親切なシステム画面や帳票を作ることができるのが、COBOLの大きな強みです。それでは、各記号の具体的な使い方を順番にマスターしていきましょう。

2. PIC Zで先頭の0(ゼロ)を消して表示する方法:ゼロサプレス

2. PIC Zで先頭の0(ゼロ)を消して表示する方法:ゼロサプレス
2. PIC Zで先頭の0(ゼロ)を消して表示する方法:ゼロサプレス

COBOLで数値を扱う際、そのまま表示すると00456のように、本来は不要な「0」が頭に付いてしまいます。これを専門用語で「ゼロ抑制(ゼロサプレス)」と呼び、編集記号Zを使うことで、先頭の0を自然な空白(スペース)に置き換えることができます。

プログラミング未経験の方でも分かりやすいよう、身近な「商品の価格表示」を例に、具体的なコードを見ていきましょう。5桁の領域に456円という数値が入っているケースを想定します。


IDENTIFICATION DIVISION.
PROGRAM-ID. EDIT-Z-DEMO.

DATA DIVISION.
WORKING-STORAGE SECTION.
* 元の数値データ(5桁で00456が入っている)
01  PRICE        PIC 9(5) VALUE 00456.
* 表示用のデータ項目(先頭4桁をZで定義)
01  PRICE-DISP   PIC ZZZZ9.

PROCEDURE DIVISION.
    * 実際の数値を表示用の項目にコピー(転記)する
    MOVE PRICE TO PRICE-DISP
    DISPLAY "表示結果:[" PRICE-DISP "]"
    STOP RUN.

このプログラムを実行すると、出力結果は以下のようになります。


表示結果:[  456]

実行結果を見ると、00456の先頭にある2つの「0」が消えて、空白になっているのが分かります。一方で、一番右側の「6」に対応する部分は9と定義しているため、数値がそのまま表示されます。

このように、「数字の桁数は確保したいけれど、先頭の余計な0は見せたくない」という場面でZは非常に重宝します。請求書や伝票の金額表示など、読みやすさが求められるシステム開発では必須のテクニックです。

3. 編集用文字「,(カンマ)」で数値を3桁区切りにする方法

3. 編集用文字「,(カンマ)」で数値を3桁区切りにする方法
3. 編集用文字「,(カンマ)」で数値を3桁区切りにする方法

家計簿や仕事の書類でも、大きな数字は3桁ごとにカンマ「,」がついていると、一目で「いくらか」が分かりやすくなりますよね。COBOLでは、このカンマ入りの表示を「編集用文字」を使って驚くほど簡単に実現できます。

プログラミング未経験の方でも安心してください。やり方は簡単で、PIC句(データ形式の定義)の中に、カンマを入れたい位置にそのまま「,」を書き込むだけです。以下のサンプルプログラムで、実際にどのように動くか見てみましょう。


IDENTIFICATION DIVISION.
PROGRAM-ID. EDIT-COMMA-DEMO.

DATA DIVISION.
WORKING-STORAGE SECTION.
* 計算用の変数(カンマを含まない純粋な数字)
01  SALES-AMOUNT       PIC 9(7) VALUE 1234567.
* 表示用の変数(カンマで編集する形式)
01  SALES-DISPLAY      PIC ZZ,ZZZ,ZZ9.

PROCEDURE DIVISION.
    * 実際の数字を表示用の形式にコピーします
    MOVE SALES-AMOUNT TO SALES-DISPLAY
    
    DISPLAY "売上金額(変換前):" SALES-AMOUNT
    DISPLAY "売上金額(変換後):" SALES-DISPLAY
    STOP RUN.

このプログラムを実行すると、画面には次のように表示されます。


売上金額(変換前):1234567
売上金額(変換後): 1,234,567

初心者向けの解説:ここがポイント!

注目してほしいのは、SALES-DISPLAYの定義に使われている「Z」という文字です。これは「ゼロサプレス」と呼ばれる機能で、もし数字が小さくて桁が余った場合に、不要な「0」を表示せずに「空白」に置き換えてくれる魔法の文字です。

この「Z」と「,」を組み合わせることで、「0,001,234」のような不自然な表示を防ぎ、私たちが普段見慣れている「1,234」という綺麗な形式で出力できます。金融システムや請求書発行システムなど、正確で見やすい数値が求められる現場では欠かせないテクニックです。

4. PIC *(アスタリスク)で空白を*に置き換える

4. PIC *(アスタリスク)で空白を*に置き換える
4. PIC *(アスタリスク)で空白を*に置き換える

金額などを印刷するとき、空白部分を「*」で埋めたい場合があります。これは改ざん防止や見た目を整える目的で使われます。そのときに使うのが*です。


IDENTIFICATION DIVISION.
PROGRAM-ID. EDIT-STAR-DEMO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01  AMOUNT          PIC 9(5) VALUE 123.
01  AMOUNT-EDITED   PIC **,**9.
PROCEDURE DIVISION.
    MOVE AMOUNT TO AMOUNT-EDITED
    DISPLAY "出力結果:" AMOUNT-EDITED
    STOP RUN.

実行結果は次のようになります。


出力結果:**1,23

このように、空白が「*」で埋められ、きれいに整った印象になります。帳票印刷などで「見せ方」を工夫したいときに使われます。

5. PIC $(ドル記号)で金額表示を行う

5. PIC $(ドル記号)で金額表示を行う
5. PIC $(ドル記号)で金額表示を行う

金額データに「ドルマーク」や「円記号」を付けたいときは、$を使います。これを指定すると、自動的に金額の前に「$」が付きます。


IDENTIFICATION DIVISION.
PROGRAM-ID. EDIT-DOLLAR-DEMO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01  PRICE         PIC 9(6) VALUE 12345.
01  PRICE-DISP    PIC $ZZ,ZZ9.
PROCEDURE DIVISION.
    MOVE PRICE TO PRICE-DISP
    DISPLAY "商品価格:" PRICE-DISP
    STOP RUN.

実行結果は次の通りです。


商品価格:$12,345

簡単に「$」付きの金額表示ができます。日本円で使う場合は、「¥」を文字列として付けてもOKです。

6. 符号(+ / -)を表示する

6. 符号(+ / -)を表示する
6. 符号(+ / -)を表示する

数値がプラスかマイナスかを見せたいときは、「+」や「-」を編集記述子に含めます。


IDENTIFICATION DIVISION.
PROGRAM-ID. EDIT-SIGN-DEMO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01  BALANCE         PIC S9(5) VALUE -2500.
01  BALANCE-DISP    PIC +ZZ,ZZ9.
PROCEDURE DIVISION.
    MOVE BALANCE TO BALANCE-DISP
    DISPLAY "残高:" BALANCE-DISP
    STOP RUN.

出力結果は次のようになります。


残高:-2,500

符号が自動で付いているのがわかります。会計処理などでは、この形式がよく使われます。

7. 編集記述子の組み合わせでプロ並みの出力を作る

7. 編集記述子の組み合わせでプロ並みの出力を作る
7. 編集記述子の組み合わせでプロ並みの出力を作る

ここまで紹介した記述子は、組み合わせることでより高度な整形ができます。たとえば、ドルマーク付きでカンマ区切り、さらに不要な0を消す、というようなことも可能です。


IDENTIFICATION DIVISION.
PROGRAM-ID. EDIT-COMBO-DEMO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01  SALES-TOTAL        PIC 9(7) VALUE 0004567.
01  SALES-FORMAT       PIC $**,***,ZZ9.
PROCEDURE DIVISION.
    MOVE SALES-TOTAL TO SALES-FORMAT
    DISPLAY "売上合計:" SALES-FORMAT
    STOP RUN.

出力結果:


売上合計:$**4,567

このように、複数の編集記述子を組み合わせて使うことで、見やすくて実用的な表示を作ることができます。

8. 実務での活用例

8. 実務での活用例
8. 実務での活用例

実際の企業システムでは、帳票やレポート、画面出力などでこれらの編集記述子がよく使われます。特に金融システムや販売管理システムでは、数字の桁数が多くなるため、見やすさ信頼性が重要です。

たとえば売上報告書などで「$***12,345」と表示すれば、ぱっと見ただけで桁や金額が明確に分かります。こうした細かい表示の工夫が、業務の正確性を高めるのです。

9. まとめ:COBOLの編集記述子で美しい数値出力を作ろう

9. まとめ:COBOLの編集記述子で美しい数値出力を作ろう
9. まとめ:COBOLの編集記述子で美しい数値出力を作ろう

COBOLのEDITING記述子を使うことで、数字をきれいに整形して出力できます。Zで0を消し、,で桁区切り、*$でデザイン性を加えれば、実務で使える見やすい帳票を作ることができます。これらをマスターすることで、COBOLの数値表示の幅が大きく広がります。

まとめ

まとめ
まとめ

ここまで、COBOLにおける「EDITING記述子(編集記述子)」の基本から応用までを詳しく解説してきました。数値データの扱いに長けたCOBOLにとって、単に計算を行うだけでなく「人間が見やすい形に整えて出力する」という工程は、非常に重要な役割を担っています。

編集記述子の役割と重要性

プログラム内部で保持されている数値データは、計算効率を優先するため、符号(S)や想定小数点(V)を含んだ形式になっています。しかし、これをそのまま画面や紙の帳票に出力しても、エンドユーザーにとっては非常に読みづらいものになってしまいます。そこで登場するのが、PIC句(ピクチャ句)を用いた編集記述子です。

特に、金融系や公共系のレガシーシステムが現役で稼働している現場では、金額の改ざん防止(アスタリスク埋め)や、厳密なカンマ区切り、正しい通貨記号の付与といった「表示の信頼性」が強く求められます。今回学んだZ,*$+といった記号を適切に使い分けることで、バグのない、かつ視認性の高いシステムを構築することができるようになります。

実務で使える!さらに高度な編集のテクニック

記事本編でも組み合わせの例を紹介しましたが、実務では「もし値が0だった場合にどう見せるか」という点がよく議論になります。たとえば、PIC ZZZ9と指定した場合、値が「0」のときは「 0」と表示されますが、すべてを空白にしたい場合はPIC ZZZZ(またはPIC Z(4))と記述します。このように、要件定義に合わせて一文字単位で制御できるのがCOBOLの強みです。

C#での数値フォーマットとの比較

現代的なオブジェクト指向言語であるC#などでも、数値を整形する機能は備わっています。COBOLの編集記述子がどのようにモダンな言語に反映されているか、比較用のサンプルコードを見てみましょう。


using System;

class Program
{
    static void Main()
    {
        long salesAmount = 1234567;
        decimal price = 12345.67m;

        // C#でのカンマ区切り出力(COBOLのPIC ZZ,ZZZ,ZZ9に相当)
        Console.WriteLine($"売上金額:{salesAmount:N0}");

        // C#での通貨表示(COBOLのPIC $ZZ,ZZ9.99に相当)
        // 実行環境のロケールに合わせて¥や$が自動付与されます
        Console.WriteLine($"商品価格:{price:C}");
        
        // ゼロ埋め(カスタム書式)
        int code = 45;
        Console.WriteLine($"商品コード:{code:D5}");
    }
}

C#を実行した結果は以下の通りです。


売上金額:1,234,567
商品価格:¥12,346
商品コード:00045

C#ではメソッドやフォーマット識別子を使って動的に整形を行いますが、COBOLは「データ定義そのものに表示形式を組み込む」という設計思想を持っています。この違いを理解しておくと、他言語へのリプレース案件や、外部システムとの連携時にも非常に役立ちます。

COBOLでの応用:ゼロサプレスとチェック保護

あらためて、COBOLでよく使われるテクニックを整理した総合的なサンプルプログラムを確認しておきましょう。特に「チェック保護(アスタリスク)」と「ゼロサプレス(Z)」の挙動の違いに注目してください。


IDENTIFICATION DIVISION.
PROGRAM-ID. EDIT-SUMMARY.

DATA DIVISION.
WORKING-STORAGE SECTION.
* 元の数値データ
01  VAL-NUM        PIC 9(6) VALUE 000789.
* 1. ゼロサプレス(先頭の0を空白に)
01  DISP-Z         PIC ZZZ,ZZ9.
* 2. チェック保護(先頭の0を*に:小切手印刷などで使用)
01  DISP-STAR      PIC ***,**9.
* 3. 通貨記号(フローティング・ドル:金額の直前に$を置く)
01  DISP-DOLLAR    PIC $$,$$9.

PROCEDURE DIVISION.
    MOVE VAL-NUM TO DISP-Z
    DISPLAY "ゼロサプレス結果   :[" DISP-Z "]"

    MOVE VAL-NUM TO DISP-STAR
    DISPLAY "チェック保護結果   :[" DISP-STAR "]"

    MOVE VAL-NUM TO DISP-DOLLAR
    DISPLAY "ドル記号フローティング:[" DISP-DOLLAR "]"

    STOP RUN.

出力結果は以下のようになります。


ゼロサプレス結果   :[    789]
チェック保護結果   :[***,789]
ドル記号フローティング:[  $789]

このように、$記号を複数並べる「フローティング(浮動)」記述を使うと、数字の桁数に合わせて通貨記号が右に寄って表示されるため、非常にプロフェッショナルな見た目になります。これもCOBOLが事務処理に特化した言語と言われる所以ですね。

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

生徒

「先生、ありがとうございます!編集記述子を使うだけで、あんなにバラバラだった数字が、まるでプロの帳票みたいに整いました。特にPIC $$,$$9のように記号を並べるだけで、ドルマークが数字のすぐ横に移動してくれるのは驚きました。」

先生

「そこに気づきましたか!それは『浮動挿入』というテクニックですね。固定の場所に記号を置くのではなく、数値の大きさに合わせて位置が変わる仕組みです。これもCOBOLが長年、銀行や企業の経理システムで愛されてきた理由の一つなんですよ。」

生徒

「なるほど…。でも、もし間違えてPIC 99,999で定義したところに、もっと大きな数字をMOVEしちゃったらどうなるんですか?」

先生

「いい着眼点です。桁溢れ(オーバーフロー)が発生して、上位の桁が消えてしまうことがあります。だからCOBOLプログラマは、データの最大値を常に予測して、余裕を持った桁数で編集記述子を設計する必要があるんです。」

生徒

「プログラムの書き方だけでなく、データの『出口』までしっかり考えるのが大事なんですね。アスタリスクで埋めるのも、ただの飾りじゃなくて改ざん防止っていう意味があると知って、COBOLの奥深さを感じました!」

先生

「その通り。表示の美しさはシステムの信頼性に直結します。次は、もっと複雑な条件分岐や計算結果の丸め処理についても学んでいきましょうか。」

カテゴリの一覧へ
新着記事
New1
COBOL
COBOLのEVALUATE文の使い方を完全ガイド!初心者でもわかる多岐選択
New2
C#
C#の拡張メソッドとは?既存クラスに機能を追加する便利技
New3
C#
ASP.NET CoreとC#の例外処理ベストプラクティス!エラーハンドリングの基本と実装方法
New4
Azure
Azure WAFとは?SQLインジェクションやXSSからWebサイトを守る初心者ガイド
人気記事
No.1
Java&Spring記事人気No1
C#
C#のstaticクラスとstaticメソッドの基本と使い方をやさしく解説!
No.2
Java&Spring記事人気No2
C#
C#のWPFとは?XAMLでGUI開発を基礎から完全解説!初心者向けの入門ガイド
No.3
Java&Spring記事人気No3
C#
C# WinForms入門!初心者でも簡単にWindowsアプリを作る方法
No.4
Java&Spring記事人気No4
C#
C#でswitch式を使う方法!C# 8.0以降の新機能を解説
No.5
Java&Spring記事人気No5
COBOL
COBOLのファイルステータス(FILE STATUS)の使い方を完全ガイド!初心者でもわかるエラー処理の基本
No.6
Java&Spring記事人気No6
C#
C#のイベント処理を完全攻略!WinFormsとWPFの基本を解説
No.7
Java&Spring記事人気No7
C#
C#のbool型を完全解説!初心者でもわかるtrueとfalseの基本と使い方
No.8
Java&Spring記事人気No8
C#
C#の文字列を数値に変換する方法(int.Parse・TryParse)をわかりやすく解説!