CSVファイルの数値と指数表示について – LibreOffice Calc

先日、CSV形式のデータを編集していてトラブルになりかけましたので整理しておきます。

問題になったのはCSV形式の顧客データで、利用者が希望のユーザIDを登録できるものでした。アルファベットのみやアルファベットと数字の組み合わせであれば良いのですが、数字のみのIDで桁数が多いと Excel や Calc の仕様によって指数表示に変換されてしまう場合があります。

画面内でスクロールなしで見渡せる程度であれば気がつくかもしれませんが、データ件数が多い場合は知らないまに数値が指数表示に変換されて、しかも指数表示のままテキストデータとして保存されてしまいます。
そのような問題を回避するには、数字のみの列を「テキスト」列として扱う必要があります。

テストのために、次のようなサンプルのCSVファイルを用意しました。

サンプルCSV

これをLibreOffice Calc(またはExcel)で開くと、テキストインポートのダイアログが表示されます。

テキストのインポート

まずは「OK」ボタンをクリックしてそのままインポートしてみます。

インポート結果

桁数が多いセル(16桁以上)が指数表示になります。
これを、そのまま上書き(CSV形式)で保存してみます。
※選択した書式を保持をクリック

CSV形式で保存

保存したCSVファイルをテキストエディタで開いてみると、16桁以上の行が指数表示のまま文字列として保存されています。

テキストエディタで確認

例えば、クレジットカード番号のような数字をIDとして登録していると、CSV形式で編集を行う際にデータを壊してしまう可能性があるということです。
このような問題を回避するには次のようにします。

テキストのインポート

先ほどの「テキストのインポート」ダイアログで問題となる列を選んで列の種類を「標準」から「テキスト」に変更して「OK」ボタンを押します。

インポート結果

前回とは違って指数表示がなくなり、すべての桁が表示されています。
適当に編集して上書きで保存してみます。

上書き保存
CSV形式で保存

保存したCSV形式ファイルをテキストエディタで開いてみます。

テキストエディタで確認

16桁以上の行が指数表示に変換されることなく保存されています。
そして「テキスト」形式の列にはダブルクオートが付いています。
ここで、テキスト列のダブルクオートを外したい場合は、「名前を付けて保存」->「フィルタ設定を編集する」として、

名前を付けて保存

「テキストファイルのエクスポート」ダイアログで「テキストの区切り記号」を空にして保存します。

テキストファイルのエクスポート

出来上がったCSVファイルをテキストエディタで開いてみます。

テキストエディタで確認

以上です。

※下記のページを参考にさせていただきました。
「Excel:指数表示にされてしまった数値を一気に直す」
[XL2002]セルの数値が指数表示になる条件