目次を開く
CSVに入っていた長い番号をExcelで開いたら、
1.23457E+15
のような表示になった。
「表示だけの問題かな」と思って保存し直すと、元の番号まで変わっていることがある。
商品コード、注文番号、会員番号、追跡番号のような計算しない数字では特に注意したい。
E+表示は指数表記
Excelは長い数字を数値として認識すると、指数表記で表示することがある。
たとえば非常に大きな数を短く表示するための仕組みだ。
計算する数なら便利。
でも商品コードは数ではなく「数字でできた名前」に近い。
足し算する必要はない。
本当に怖いのは桁落ち
見た目が指数表記になるだけなら、表示形式を変えれば戻せる場合がある。
問題は、長すぎる数値をExcelが数値として扱い、下の桁を正確に保持できなくなるケース。
その状態でCSVを保存すると、元の識別番号と違う値を書き出す可能性がある。
一度失われた桁は、表示形式を戻しても復元できない。
先頭ゼロ問題と親戚
「001234」が「1234」になる問題も同じ系統だ。
Excelが識別子を数値だと判断することで起きる。
日付への自動変換も似ている。
便利な自動判定が、データ交換では余計なお世話になる。
長い番号は文字列として扱う
商品コードやIDのように計算しない列は、最初から文字列として読み込む方が安全だ。
CSVをダブルクリックして直接開くより、Excelのデータ取り込み機能などで列の型を指定できる方法を使う。
重要なのは、Excelが勝手に数値へ変換する前に文字列として扱うこと。
保存前に元CSVと比較する
長い番号を含むCSVを編集したら、保存後に元データと比較する。
特に識別子の列を見る。
桁数が変わっていないか。
末尾がゼロに置き換わっていないか。
指数表記の文字列がそのまま入っていないか。
大量のCSVなら、人間の目で全件確認するのは現実的ではない。
最後に
CSVの長い数字は「数字に見える文字」と考えると事故が減る。
計算しないIDをExcelへ渡すなら、数値として扱わせない。
そして、編集後のCSVをそのまま本番へ入れない。
インポート前に、型・桁数・先頭ゼロ・列数を確認する。
地味ですが、データ移行ではこの地味さが一番安い保険です。
