COBOLのPERFORM VARYINGとINDEXED BY句を完全ガイド!初心者でもわかる繰り返し処理の基本
生徒
「COBOLで何回も同じ処理を繰り返す方法ってありますか?」
先生
「はい、COBOLではPERFORM VARYINGという命令を使って、繰り返し処理ができますよ。」
生徒
「それって、どんな時に使うんですか?」
先生
「例えば、配列(データをまとめたもの)を順番に処理したいときに使います。それでは、基本の使い方を見てみましょう!」
1. PERFORM VARYINGとは?
PERFORM VARYINGは、COBOLの繰り返し処理(ループ)を行うための命令です。プログラミングでは、何かを「何回も同じように繰り返す」ことがよくあります。
例えば「1から10まで順番に表示する」といった処理を行いたいときに、PERFORM VARYINGを使えばとても簡単に書くことができます。
日本語にすると「〜を変えながら処理を繰り返す」という意味になります。
2. PERFORM VARYINGの基本的な構文
まずはPERFORM VARYINGを使って、1から5までの数字を順番に表示する例を見てみましょう。
IDENTIFICATION DIVISION.
PROGRAM-ID. SampleLoop.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 COUNTER PIC 9(2) VALUE 1.
PROCEDURE DIVISION.
PERFORM VARYING COUNTER FROM 1 BY 1 UNTIL COUNTER > 5
DISPLAY "現在のカウントは:" COUNTER
END-PERFORM.
STOP RUN.
このプログラムでは、COUNTERという変数を1からスタートして、1ずつ増やしながら、5を超えるまで繰り返しています。
現在のカウントは:1
現在のカウントは:2
現在のカウントは:3
現在のカウントは:4
現在のカウントは:5
このように、簡単にループ処理を作ることができます。
3. INDEXED BY句とテーブル(配列)
次に、複数のデータをまとめて持てる配列(テーブル)と、それを扱うためのINDEXED BY句を紹介します。
INDEXED BYは「何番目のデータか」を示すインデックス(添字)を使って、配列の要素にアクセスできるようにする仕組みです。
IDENTIFICATION DIVISION.
PROGRAM-ID. IndexedLoop.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 STUDENT-NAMES.
05 STUDENT-NAME OCCURS 5 TIMES INDEXED BY IDX.
10 NAME PIC X(10).
PROCEDURE DIVISION.
MOVE "山田" TO NAME (1)
MOVE "佐藤" TO NAME (2)
MOVE "鈴木" TO NAME (3)
MOVE "田中" TO NAME (4)
MOVE "高橋" TO NAME (5)
PERFORM VARYING IDX FROM 1 BY 1 UNTIL IDX > 5
DISPLAY "学生名:" NAME (IDX)
END-PERFORM.
STOP RUN.
学生名:山田
学生名:佐藤
学生名:鈴木
学生名:田中
学生名:高橋
このように、配列とインデックスを使えば、複数のデータを順番に処理することができます。
4. PERFORM VARYINGとINDEXED BYの違いと注意点
PERFORM VARYINGは「普通の変数」を使ってカウントアップします。一方、INDEXED BYで使うIDXのようなインデックスは、特別な変数で、直接表示や計算には使えません。
インデックス付き配列を使うときは、SET IDX TO 1のようにSET文を使って値を設定し、PERFORM VARYING IDX FROM 1 BY 1のように書きます。
ただし、初心者のうちは、通常の変数での繰り返し処理から始めて、配列処理に慣れてからインデックスも使うと理解しやすいでしょう。
5. プログラミング未経験でもわかる!繰り返し処理の身近な例え
例えば「5人に順番に挨拶する」と考えてみてください。
- 1人目:「こんにちは、山田さん」
- 2人目:「こんにちは、佐藤さん」
- ...と順番に繰り返していく
これがまさにプログラムでの繰り返し処理(ループ)です。PERFORM VARYINGを使えば、これを自動的に行ってくれるわけです。
6. PERFORM VARYINGとINDEXED BYを使うメリット
同じ処理を何回も書かなくて済むので、プログラムが短く・読みやすく・修正しやすくなります。また、たくさんのデータをまとめて扱えるため、大量の処理が必要な場面でも便利です。
初心者にとっては最初は少し難しく感じるかもしれませんが、仕組みを理解すればとても強力なツールになります。
まとめ
COBOLで繰り返し処理を扱うときに欠かせない要素として、PERFORM VARYINGとINDEXED BY句の正確な理解があります。とくに業務システムでは大量のデータを扱うことが当たり前で、ひとつひとつの処理を手作業で記述すると複雑さが増してしまいます。そのような環境で安定した処理を実現するうえで、繰り返し処理の制御方法をしっかりと押さえておくことは非常に重要です。今回取り上げたPERFORM VARYINGは、変数を一定のルールで変化させながら実行できる強力な仕組みであり、カウントアップや範囲指定を自然な形で表現できます。また、INDEXED BY句によって配列をより整理された形で扱えるため、データを順番に処理したり検索したりするときにとても役立ちます。これらの文法を理解することは、COBOLを使って実務レベルのプログラムを構築するための大きな一歩となるでしょう。 とくに配列とインデックスの組み合わせは、帳票処理や名簿処理、売上データの展開など、多くの場面で登場します。インデックスは通常の変数とは異なり、画面にそのまま表示することはできませんが、テーブルの位置を効率よく指定できるという特徴があります。この点を正しく理解しておけば、データを扱う場面で迷うことが少なくなり、仕様変更に対しても柔軟に対応できます。同時に、PERFORM VARYINGの終了条件や増分の指定を丁寧に設計することで、意図しない繰り返しを防ぎ、安全なプログラムの土台が築けます。初心者の段階では難しく見える文法も、例を通して着実に身につけていけば自然と理解できるようになります。 実際の業務を想定したとき、複数のデータを順番に処理する場面は頻繁に発生します。そうした状況で、ひとつずつ手作業で書き並べるのではなく、繰り返し処理を用いて規則的に記述するほうが、読み手にとっても理解しやすく保守性が高まります。配列の内容を変更するときも、同じ構造のまま繰り返し部分だけを修正すれば済むため、管理がしやすくなります。さらに、テーブル要素の数が増えても処理を拡張するのが容易であり、複雑な業務ロジックにも柔軟に対応できます。このように、PERFORM VARYINGとINDEXED BY句は、COBOLのプログラム全体を効率化する重要な役割を果たしているのです。 また、繰り返し処理を正しく記述するためには、変数やインデックスの設定方法を丁寧に確認する習慣を身につけることが欠かせません。誤った条件設定やインデックスの初期化漏れがあると、期待したとおりの結果が得られないだけでなく、ループが終わらない状態になる場合もあります。こうした問題を避けるためにも、処理を始める前に構造全体の流れを整理し、どの範囲をどの順番で処理するのかを明確にしておくことが大切です。実務では、一見単純に見えるループ処理でも、業務特有のルールを組み合わせることで精密な制御が求められる場面が多く、基礎を確実に押さえておくかどうかが大きな差になります。 以下では、今回の振り返りとしてPERFORM VARYINGとINDEXED BYを組み合わせたサンプルを改めてまとめ、構造を整理しつつ確認してみましょう。
サンプルプログラムで振り返る繰り返し処理
IDENTIFICATION DIVISION.
PROGRAM-ID. ReviewSample.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 ITEM-LIST.
05 ITEM-NAME OCCURS 5 TIMES INDEXED BY IDX.
10 NAME PIC X(20).
01 CNT PIC 9(2).
PROCEDURE DIVISION.
MOVE "商品A" TO NAME(1)
MOVE "商品B" TO NAME(2)
MOVE "商品C" TO NAME(3)
MOVE "商品D" TO NAME(4)
MOVE "商品E" TO NAME(5)
PERFORM VARYING CNT FROM 1 BY 1 UNTIL CNT > 5
DISPLAY "対象商品:" NAME(CNT)
END-PERFORM
STOP RUN.
この例では、INDEXED BY句で定義した配列に商品名を格納し、PERFORM VARYINGにより順番に表示しています。CNTの値が1から5まで変化していくため、配列の要素をひとつずつ取り出す仕組みが簡潔に表現されています。構造を理解することで、どのような場面で応用できるかも見えてきます。データ項目が増えても柔軟に対応できるため、実際の業務システムの設計にもそのまま活かせる考え方です。 繰り返し処理にはさまざまな書き方がありますが、COBOLにおいてPERFORM VARYINGは特に扱いやすく、条件設定を明確に表現できる点で初心者にとって大きな利点があります。配列処理と合わせることで、複数の情報を効率よく扱えるプログラム構造が手に入るため、業務での利用頻度も自然と高まります。こうした基本をしっかり理解しておくことで、構造が複雑な処理や拡張を必要とする場面でも安定した書き方ができるようになります。
生徒
「繰り返し処理の仕組みが実際の業務にも使われていると思うと、理解しておくべき理由がよく分かりました。」
先生
「その通りです。PERFORM VARYINGやINDEXED BY句は、どちらも業務プログラムで非常によく利用される文法です。覚えてしまえば応用の幅が一気に広がりますよ。」
生徒
「配列とインデックスの仕組みも、例を見たら急に分かりやすく感じました。テーブル処理が怖くなくなりそうです。」
先生
「そう感じてもらえてよかったです。繰り返し処理の基本を押さえれば、COBOLで扱うデータの幅も広がりますし、実務でも確実に役立ちます。今後も例を交えながら学んでいきましょう。」