扱っているデータはCOBOL帳票?固定長データの見分け方と基礎知識

エクセルでCOBOL帳票や固定長データを整形したい方向けに、Excel関数・Power Query・MIDBなどを使って列分割、不要行除去、帳票データ変換を進める実務手順を扱います。

💡 この記事の目的

「システムから抽出したテキストデータが、Excelで開いても列が分かれない」「謎の文字の羅列になっている」……そんな経験はありませんか?

それはカンマ区切りのCSVではなく、「固定長(こていちょう)データ」と呼ばれる形式かもしれません。この記事では、手元のデータがCOBOL等で出力された固定長データなのかどうかを見分ける方法と、その背景について解説します。

そもそも「固定長データ」とは?

Excelでよく扱う「CSV形式」は、データとデータの区切りにカンマ(,)を使います。データによって文字数が変わるため「可変長(かへんちょう)データ」と呼ばれます。

一方、固定長データは「カンマなどの区切り文字を使わず、あらかじめ決められた文字数(バイト数)で項目を区切る」データ形式です。

【CSV(可変長)の例】カンマで区切られる
101,山田太郎,15000
102,クリストファー・ロビン,800

【固定長データの例】桁数が固定され、隙間はスペース等で埋められる
0101山田太郎       0000015000
0102クリストファー・ロビン0000000800
固定長データは見た目が「一枚の長方形のブロック」のように整然と並ぶことが多いのが特徴です。

手元のデータが固定長(COBOL帳票など)か見分ける4つのポイント

Windowsの「メモ帳」などでデータを開いてみて、以下の特徴に当てはまれば、それは固定長データである可能性が極めて高いです。

チェック項目 詳細と特徴
① 区切り文字がない カンマ(,)やタブ(Tab)などの明確な区切り記号が存在せず、文字や数字が隙間なく(あるいは不自然なスペースを挟んで)連続している。
② 1行の長さがすべて同じ どの行を見ても、行の末尾(改行位置)がピタリと揃っている。すべての行が同じバイト数で作られています。
③ 数値が「ゼロ埋め」されている 金額や数量が 0000150000 のように、指定の桁数に満たない部分が 0 で埋められている。(パディングと呼ばれます)
④ 文字列に「余白」がある 会社名や氏名などの短い文字の後に、必ず半角スペース(または全角スペース)が複数連続して入力され、次の項目の開始位置を無理やり揃えている。
※拡張子では判断できません: 固定長データは .txt.dat、場合によっては拡張子なしで提供されることが多く、「ファイル名」だけでは判別が難しいです。必ずテキストエディタで中身を見て確認してください。

なぜ「COBOL」でよく固定長が使われるのか?

当サイトでも「COBOLデータ整形」として紹介していますが、なぜ古いシステム(メインフレームやオフコンなど)の出力ファイルは固定長が多いのでしょうか。

  • メモリと処理速度の節約: 昔のコンピューターは性能が低かったため、「カンマを探してデータを切り分ける」という処理すら負担でした。「何バイト目から何バイト目を読む」と決め打ちできる固定長の方が、圧倒的に高速に処理できたのです。
  • COBOL言語の仕様: COBOLというプログラミング言語自体が、データを「何桁の数字」「何桁の文字」といったレコードレイアウト(構造体)で厳格に定義して扱うように設計されているため、出力もそのまま固定長になりやすいという背景があります。

COBOL以外でも固定長データは存在する?

「ウチの会社にCOBOLのシステムなんて無いから関係ない」と思われるかもしれませんが、実は現代でも固定長データは様々な重要な場面で現役で活躍しています。

分野・システム 利用シーンの例
銀行・金融機関 給与振込や口座振替で使われる「全銀協規定フォーマット(全銀フォーマット)」は、1行120バイトの厳格な固定長データです。
行政・公共機関 マイナンバー関連の連携データや、一部の社会保険・雇用保険の電子申請データなどには、現在でも固定長フォーマットが指定されることがあります。
企業間取引(EDI) 古い規格のまま運用され続けている受発注データ連携(流通BMS以前のJCA手順など)では、固定長テキストがやり取りされています。
POSレジデータ 一部のレジシステムから日次で吐き出される売上明細ログファイルなどが、固定長で記録されている場合があります。

「シンプルな固定長」と「COBOL帳票」は難易度が全く違う

ここで重要な注意点があります。同じ「固定長データ」でも、データの構造によって整形の難易度は天と地ほど違います。

データの種類 特徴 難易度
シンプルな固定長
(全銀データなど)
1行=1件のデータがきれいに並んでいる。不要な行が混ざっておらず、すべての行が同じレイアウト。
MIDBTRIM だけで各項目を切り出せる。
対応しやすい
COBOL帳票
(固定行数型)
ヘッダー混在+
1件=決まった行数
以下のような「罠」が複数同時に存在する:
  • ページヘッダー・タイトル行・罫線行・空白行が何十行おきに繰り返し混入する
  • 1件のデータが2〜3行にまたがっている(1行目に名前、2行目に住所など)
  • 上部に記載された会社名や支店名などの親情報を、下の明細行に紐付ける必要がある
1件あたりの行数は固定(例:必ず3行で1セット)なので、規則性を見抜ければ対処は可能。それでもヘッダーの紐付けなどは相当面倒な作業になる。
難しい
COBOL帳票
(不定行数型)
明細の行数が
毎回バラバラ
上記の「罠」に加え、最凶の要素が加わる:
  • 1件あたりの明細行数が毎回異なる(A社は2行、B社は7行、C社は10行…など)
  • 「ここからここまでが1件」の境界をデータの内容から判定する必要がある
  • 固定行数型の手法がそのまま使えず、行の種別を識別する仕組みを数式で自力構築しなければならない
超難関
つまり:「システムから出た謎のテキストデータ」が1行=1レコードのシンプルな固定長であれば、MIDBTRIM のテクニックだけでExcel上で処理できます。

しかし、実務で遭遇するCOBOL帳票は「ヘッダー混在+固定行数」パターン、さらには「明細行数が毎回バラバラ」という最凶パターンまで存在し、単純な切り出しだけでは歯が立ちません。当サイトでは、シンプルなケースから最凶の不規則帳票まで段階的に攻略する方法を解説しています。

まとめ:固定長データだと分かったら?

手元のデータが「固定長データ」だと判明したら、そのままExcelで開いてはいけません。すべての行がA列の1列だけに読み込まれ、1行分の長い文字列がそのまま1つのセルに入ってしまいます。列が分かれていないため、並べ替え・フィルター・集計など、Excelの基本機能がまったく使えない状態です。

次のステップでは、Excel関数のMIDB+TRIMを使って、この1列の塊から必要な項目を正確に切り出す方法を解説します。

➡️ 具体的な切り出し手法はこちらの記事へ