カテゴリ: COBOL 更新日: 2026/07/03

COBOLの帳票出力を極める!WRITE AFTER ADVANCINGの改ページ制御

WRITE AFTER ADVANCINGの改ページ制御
WRITE AFTER ADVANCINGの改ページ制御

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

生徒

「COBOLで印刷用のデータを作っているのですが、一行ずつじゃなくて、キリのいいところで次のページに移動させるにはどうすればいいですか?」

先生

「それなら『WRITE AFTER ADVANCING』という命令を使います。これを使うと、文字を書いた後に好きな数だけ行を飛ばしたり、新しいページに切り替えたりできるんですよ。」

生徒

「ADVANCING……『進める』という意味ですね!紙を送り出すイメージでしょうか?」

先生

「その通りです!昔ながらのプリンターで紙をガチャンと送る動きを想像すると分かりやすいですよ。詳しく解説していきますね!」

1. WRITE AFTER ADVANCINGとは?

1. WRITE AFTER ADVANCINGとは?
1. WRITE AFTER ADVANCINGとは?

COBOL(コボル)というプログラミング言語が得意とする仕事の一つに、大量の「帳票(ちょうひょう)」作成があります。帳票とは、請求書や売上報告書といった、印刷して使う書類のことです。こうした書類を作るとき、単に文字を並べるだけでなく、「ここは1行あける」「ここからは新しいページに印刷する」といった、紙のコントロールが必要になります。

そこで使われるのがWRITE AFTER ADVANCING(ライト・アフター・アドバンシング)という命令です。直訳すると「書き込み、その後に進める」となります。コンピュータに対して、「この一行を書き込んだら、紙をこれだけ進めてね」と指示を出すための重要な仕組みなのです。パソコンを触ったことがない方でも、タイプライターで一行打った後にレバーで紙を上に送る様子をイメージすれば、この命令の役割がスッと理解できるはずです。

2. 改行(行送り)の基本:数値指定

2. 改行(行送り)の基本:数値指定
2. 改行(行送り)の基本:数値指定

まずは最もシンプルな「行送り」から学びましょう。例えば、2行分あけて次の文字を書きたいときは、WRITE レコード名 AFTER ADVANCING 2 LINESと書きます。この「2」という数字を変えることで、1行送り、3行送りなど、自由自在にレイアウトを調整できます。

事務処理の現場では、見出しを書いた後に少し隙間をあけてデータを並べることが多いので、この数値指定は非常によく使われます。逆に、まったく行を進めたくないときは「0」を指定することもありますが、基本的には「1」や「2」を使って、読みやすい書類を作っていくことになります。プログラミング未経験でも、算数の数字を入れ替えるだけなのでとても簡単です。


* 1行書いて1行進める(通常の改行)
WRITE PRINT-REC AFTER ADVANCING 1 LINE.

* 1行書いて3行進める(2行分あける)
WRITE PRINT-REC AFTER ADVANCING 3 LINES.

3. 改ページ(ページ替え)の魔法:PAGE指定

3. 改ページ(ページ替え)の魔法:PAGE指定
3. 改ページ(ページ替え)の魔法:PAGE指定

帳票が長くなってくると、1枚の紙には収まりきらなくなります。キリのいいところで次の新しい紙に切り替えたい時に使うのがPAGE(ページ)指定です。WRITE レコード名 AFTER ADVANCING PAGEと書くだけで、コンピュータは「今の紙はここまでにして、次の真っさらなページの一行目に行こう!」と判断してくれます。

これを改ページ制御(かいページせいぎょ)と呼びます。例えば、1ページに10件のデータを載せると決めた場合、10件書き終わった瞬間にこの命令を実行すれば、11件目は必ず次のページの先頭に印刷されるようになります。まるで本をめくるように、自動的にページが切り替わる様子は、プログラムを作っていて非常に達成感がある瞬間です。

4. 行数を数えて自動で改ページする方法

4. 行数を数えて自動で改ページする方法
4. 行数を数えて自動で改ページする方法

現実のプログラムでは、「今、何行目まで書いたかな?」というのをコンピュータに数えさせ、一定の行数(例えば50行)を超えたら自動で改ページさせるという手法をよく使います。これには、前回学習したif文と、行数を数えるための「カウンター」という変数(箱)を組み合わせます。

「もしカウンターが50を超えたら、改ページしてカウンターを0に戻す」という命令を繰り返すことで、何千件、何万件という膨大なデータでも、綺麗にページが分かれた報告書が完成します。こうした「繰り返し」と「条件判断」の組み合わせは、COBOLで事務処理を行う際の大原則です。パズルを組み立てるように、一歩ずつ処理の流れを考えていきましょう。


* 行数を数えて改ページする例
IF LINE-COUNT > 50 THEN
    WRITE PRINT-REC AFTER ADVANCING PAGE
    MOVE 0 TO LINE-COUNT
ELSE
    WRITE PRINT-REC AFTER ADVANCING 1 LINE
    ADD 1 TO LINE-COUNT
END-IF.

5. 便利な機能:見出し(ヘッダー)の再出力

5. 便利な機能:見出し(ヘッダー)の再出力
5. 便利な機能:見出し(ヘッダー)の再出力

改ページをした直後には、新しいページの先頭に「売上報告書」というタイトルや、「日付」「ページ番号」をもう一度表示したいですよね。これを見出し(ヘッダー)と呼びます。改ページ制御を行う際は、この「見出しを出力する処理」をセットで行うのがプロの書き方です。

具体的には、ADVANCING PAGEでページを切り替えた直後に、見出し用の別のレコードをWRITEします。これにより、2ページ目、3ページ目にも必ずタイトルが表示され、誰が見ても分かりやすい書類になります。こうした「気配り」をプログラムに盛り込むことで、使い勝手の良いシステムが生まれるのです。パソコンに慣れていなくても、「自分が紙で見るときにどうなっていてほしいか」を想像することが一番の上達への近道です。

6. 特殊な制御: mnemonic-name(呼び名)の使用

6. 特殊な制御: mnemonic-name(呼び名)の使用
6. 特殊な制御: mnemonic-name(呼び名)の使用

現場の古いシステムなどでは、数字やPAGEという言葉の代わりに、あらかじめ決めておいた「呼び名」を使って改ページを指定することもあります。これは、使用するプリンターの種類によって改ページの仕組みが微妙に異なる場合に対応するための古い名残です。

例えば、ADVANCING C01(チャンネル01までスキップ)といった書き方です。最近の環境ではあまり見かけませんが、もし先輩が書いたコードに不思議なアルファベットが出てきたら、「これも改ページや特殊な行送りのための呼び名なんだな」と思い出してください。基本はPAGEや数値で十分通用しますので、まずは基本をしっかり押さえましょう。

7. 実際のプログラム全体の流れ(サンプルコード)

7. 実際のプログラム全体の流れ(サンプルコード)
7. 実際のプログラム全体の流れ(サンプルコード)

ここで、ファイルを開いて、1行書き、改ページをして、もう1行書くという一連の流れをプログラムで見てみましょう。全体の構造を眺めることで、どこで「紙送り」の指示を出しているのかがより明確になります。COBOLは上から順番に命令が実行されるので、物語を読むように追ってみてください。


PROCEDURE DIVISION.
* 1. ファイルを開く
    OPEN OUTPUT PRINT-FILE.

* 2. 1ページ目のタイトルを書く
    MOVE "--- 月間売上報告書 ---" TO PRINT-REC.
    WRITE PRINT-REC AFTER ADVANCING 1 LINE.

* 3. 2行あけてデータを書く
    MOVE "商品名: ノートパソコン" TO PRINT-REC.
    WRITE PRINT-REC AFTER ADVANCING 3 LINES.

* 4. 新しいページに切り替えて、2ページ目を書く
    MOVE "--- 2ページ目(続き) ---" TO PRINT-REC.
    WRITE PRINT-REC AFTER ADVANCING PAGE.

* 5. ファイルを閉じる
    CLOSE PRINT-FILE.
    STOP RUN.

(出力イメージ)
[1ページ目]
--- 月間売上報告書 ---


商品名: ノートパソコン

[2ページ目]
--- 2ページ目(続き) ---

8. 改ページ制御で注意すべき「BEFORE」との違い

8. 改ページ制御で注意すべき「BEFORE」との違い
8. 改ページ制御で注意すべき「BEFORE」との違い

実は、AFTER ADVANCING(書いた後に進める)の他に、BEFORE ADVANCING(書く前に進める)という書き方も存在します。しかし、現在の日本の開発現場では、圧倒的にAFTERの方が好んで使われます。なぜなら、「書いてから一行下がる」という動きが、私たちがノートに文字を書く感覚と一致していて間違いが少ないからです。

もしBEFOREとAFTERが混ざってしまうと、1行に2回分の上書きが起きてしまったり、意図しない空白行ができたりと、トラブルの原因になります。初心者の方は、まずは「書いたら進む(AFTER)」というルールで統一して覚えることを強くお勧めします。この一貫性が、バグ(プログラムのミス)のない綺麗なコードを作る秘訣です。

まとめ

まとめ
まとめ

今回はCOBOLにおける帳票出力の重要な仕組みであるWRITE AFTER ADVANCINGについて詳しく理解しました。COBOLは業務システムや帳票処理に強いプログラミング言語であり、単にデータを出力するだけではなく、人間が読みやすいレイアウトを作ることが求められます。その中でもWRITE AFTER ADVANCINGは、改行制御や改ページ制御を行うための非常に重要な命令です。 まず基本となるのは、行送りの制御です。WRITE文に続けてAFTER ADVANCINGと数値を指定することで、何行分進めるかを自由にコントロールできます。この仕組みによって、見出しのあとに空白行を入れたり、データを読みやすく整列させたりすることが可能になります。特に帳票レイアウト設計では、この行間の調整が読みやすさに直結するため、実務でも頻繁に利用される重要なテクニックです。 次に重要なのが改ページ制御です。AFTER ADVANCING PAGEを使うことで、現在のページを終了し、新しいページの先頭に移動することができます。これは大量データを扱うバッチ処理や報告書作成において不可欠な機能です。一定件数ごとにページを分割することで、印刷物としても見やすく整理された帳票を作成できます。 また実務では、単純にページを切り替えるだけでなく、ページごとに見出しを再表示することが重要になります。これによりどのページを見ても内容が分かる帳票になります。WRITE AFTER ADVANCING PAGEの直後に見出しを出力する処理を組み込むことで、より実践的な帳票が完成します。 さらに、行数カウンターを利用した自動改ページの仕組みも重要なポイントです。一定の行数を超えたら改ページしカウンターをリセットするという処理を組み込むことで、どれだけデータが増えても安定したレイアウトを維持できます。このような制御はCOBOLの業務システムでは基本的な設計パターンとなっています。 注意点として、BEFORE ADVANCINGとAFTER ADVANCINGの違いを理解することも大切です。一般的にはAFTER ADVANCINGの方が直感的で扱いやすく、実務でも広く使われています。統一して使用することでバグの発生を防ぐことができます。 以下に、改ページと行送りを組み合わせた実践的なサンプルを示します。


DATA DIVISION.
WORKING-STORAGE SECTION.
01 LINE-COUNT PIC 9(3) VALUE 0.

PROCEDURE DIVISION.
    OPEN OUTPUT PRINT-FILE.

    PERFORM 100 TIMES
        IF LINE-COUNT > 5 THEN
            WRITE PRINT-REC AFTER ADVANCING PAGE
            MOVE 0 TO LINE-COUNT
            MOVE "--- 新しいページ ---" TO PRINT-REC
            WRITE PRINT-REC AFTER ADVANCING 1 LINE
        ELSE
            MOVE "データ行" TO PRINT-REC
            WRITE PRINT-REC AFTER ADVANCING 1 LINE
            ADD 1 TO LINE-COUNT
        END-IF
    END-PERFORM.

    CLOSE PRINT-FILE.
    STOP RUN.

実行結果のイメージは以下の通りです。


データ行
データ行
データ行
データ行
データ行
データ行

--- 新しいページ ---
データ行
データ行

このようにWRITE AFTER ADVANCINGを活用することで、COBOLの帳票出力は単なる文字出力から一歩進んだ「レイアウト制御」へと進化します。初心者の方はまず1行送りと改ページの基本を理解し、その後カウンター制御や見出し再出力といった応用へと進むことで、実務レベルの帳票作成スキルを身につけることができます。繰り返しコードを書いて動きを確認することで理解が深まりますので、ぜひ手を動かしながら習得していきましょう。

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

生徒

「WRITE AFTER ADVANCINGでこんなに細かく帳票を制御できるとは思いませんでした」

先生

「COBOLは帳票処理に特化した機能が豊富なので、レイアウト制御がとても得意なんです」

生徒

「行送りと改ページの違いもはっきり分かりました」

先生

「その理解はとても大切です。特にPAGE指定は実務でよく使います」

生徒

「行数をカウントして自動でページを変える仕組みも面白かったです」

先生

「その通りです。大規模データでも安定した帳票を作るための基本テクニックです」

生徒

「これで実際の帳票作成にも挑戦できそうです」

先生

「ぜひ実践してみてください。理解が一気に深まりますよ」

カテゴリの一覧へ
新着記事
New1
COBOL
COBOLのREAD文を完全マスター!初心者でもわかるレコードの読み込み方法
New2
COBOL
COBOLのCALL文の基本構文とパラメータ渡しを完全ガイド!初心者向けにやさしく解説
New3
C#
C# CLIツール開発入門!Processクラスで外部コマンドを実行する方法
New4
Azure
Azure Load Balancerで高可用性を実現!負荷分散の仕組みと構築手順を徹底解説
人気記事
No.1
Java&Spring記事人気No1
C#
C#のthisキーワードとは?現在のオブジェクトを指す仕組みをわかりやすく解説!
No.2
Java&Spring記事人気No2
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.3
Java&Spring記事人気No3
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.4
Java&Spring記事人気No4
C#
C#のforeachループを完全ガイド!初心者でもわかるコレクション操作の基本
No.5
Java&Spring記事人気No5
C#
C#のラムダ式の書き方と構文を初心者向けに完全解説
No.6
Java&Spring記事人気No6
COBOL
COBOLのコンパイルエラーの原因と対処法を完全ガイド!初心者でもわかる基本のキホン
No.7
Java&Spring記事人気No7
COBOL
COBOLのCOPY句の使い方を完全ガイド!初心者でもわかる共通部品の再利用方法
No.8
Java&Spring記事人気No8
C#
C#のWPFとは?XAMLでGUI開発を基礎から完全解説!初心者向けの入門ガイド