業務で得意先様のフォーマットや、昔から使っている基幹システムのデータを取り出す際、「固定長テキスト(TXT)」という形式に出会うことはありませんか?
・メモ帳で開くと文字がびっしり詰まっていて読めない
・Excelで開こうとしても列がバラバラになってしまう
・手作業で区切ろうとすると、1文字ズレただけでデータが台無しになる
実はこれ、データの「区切り方」に特有のルールがあることが原因です。
■ なぜ固定長TXTはExcelで扱いにくいのか?
CSVは「,(カンマ)」でデータが区切られていますが、固定長テキストには区切り文字がありません。
代わりに「1~3バイト目は伝票番号」「4~11バイト目は日付」というように、バイト数(長さ)でデータの場所が決まっています。
これをそのままExcelで開くと、
00120260312アイワークスサマ 00015000
のように、すべての項目が1つのセルに繋がって表示されてしまいます。
さらにやっかいなのが「全角文字」です。
半角は1文字=1バイトですが、全角は1文字=2バイト。
「文字数」で数えて区切ると、全角が入った行だけ後ろの項目がズレてしまいます。
■ 現場で起きやすいトラブル
固定長データの扱いで特に神経を使うのが次のようなケースです。
・振込データの確認(全銀ファイルなど)
・古いシステムからの在庫データ抽出
・取引先から届くEDIデータの確認
「どこまでが名前で、どこからが数字か」をいちいち数えて列を分ける作業は、数行ならまだしも、数百、数千行となると気が遠くなる作業です。
■ 対策方法
いくつか効率化の方法があります。
① Excelの「テキストファイルウィザード」で固定長指定をする
② Pythonなどのプログラムで切り出す
③ 専用の変換ツールを使う
ただし、Excelの標準機能では毎回「ここからここまでがこの項目」という設定を手動で行う必要があり、設定をミスすると大きな事故に繋がります。
また、先頭の「0」が消えてしまい、コードが別物になることもあります。
そのため私は、固定長TXTをCSVに変換するExcelのツールを作って使っています。
・項目名と桁数は、表に並べるだけ(一度作れば毎回使える)
・桁は「バイト」で数える(全角2・半角1を自動で判別)
・全角文字の途中で区切れてしまう行を見つけて、一覧で知らせる
・先頭の「0」を消さない
・本番の前に、先頭100件を試しに変換して区切りを確かめられる
手作業で数えて区切っていた作業が、10万件でも10秒ほどで終わります。
■ 同じことで困っている方へ
このツールのVBAコード全文と、貼り付け手順・使い方を、ココナラで公開しています。
Excelにコードを貼るだけで使えます。
▽固定長TXT → CSV(この記事のツール)
▽CSV → 固定長TXT(逆向き)
※項目と桁数の表は、2つのツールで共通です。同じ表がそのまま使えます。
「うちの形式に合わせて作ってほしい」「毎日の作業を自動にしたい」という場合は、専用版でお作りします。お気軽にご相談ください。
▽サービス(専用版)
「固定長TXTとCSVを、桁ズレなく相互に変換します」
現役のSEとして、専門用語はなるべく使わずにご説明します。