注文書係

単価の小数がCSVにしたら消えた — Excelの「表示桁数」がそのまま保存されるという盲点

公開:

受注データの単価に「12.75円」と入れておいたのに、CSVにして基幹システムに取り込んだら「12.8」や「13」になっていた。重量「0.25kg」が「0.3」になっていた——こうしたことが起きることがあります。Excelの画面ではセルを選ぶと数式バーに「12.75」と出ていて、値そのものは正しく入っているのに、です。

このとき疑いたいのが、Excelの表示形式で「小数点以下の表示桁数」を減らしていたことです。CSVは、Excelのセルに入っている値ではなく、画面に見えている内容を書き出すことがあります。この記事では、単価・重量・入数のような小数を持つ数値に絞って、なぜ桁が消えるのか、どう確かめるか、送る前にどう防ぐかを整理します。

「セルの中身」と「見えている数字」は別物

Excelの表示形式は、セルに入っている値はそのままに、見せ方だけを変える機能です。単価の列に「小数点以下の表示桁数を減らす」ボタンを使ったり、表示形式で「数値・小数点以下の桁数0」を選んだりすると、セルの中身は「12.75」のまま、画面には「13」と表示されます。Excelの中で計算するときは中身の「12.75」が使われるので、金額の列もずれず、気づきにくいのが特徴です。

ところが、CSVは色や表示形式を持てない、値だけを入れる形式です。Microsoftのコミュニティフォーラムでは、表示形式で小数点以下の桁を減らした状態でCSVに保存すると、見えている桁までしか残らず、隠れていた桁は失われる、という報告とそれに対する回答があります。つまり、画面に「13」と見えていれば、CSVには「13」と書かれることがあるということです。

Excelのセルの中身表示形式(小数点以下の桁数)画面の表示CSVに書かれる内容(起こりうる例)
12.752桁12.7512.75
12.751桁12.812.8
12.750桁1313
0.251桁0.30.3

Microsoftの公式ドキュメントでこの挙動が明記されているところは、今回は確認できませんでした。お使いのExcelのバージョンや設定によって違う可能性もあるため、後述の手順で、実際に保存したCSVの中身を確かめるのが確実です。

桁が消えると、取り込んだあとに何が起きるか

金額が合わなくなる

単価12.75円の品を100個受注した場合、本来の金額は1,275円です。CSVの単価が「13」になっていれば、基幹システム側で計算される金額は1,300円になり、25円ずれます。1明細あたりは小さなずれでも、明細が多い注文や、同じ品を毎週受ける取引先では、請求の段階で食い違いとして表面化します。

端数処理の方式(四捨五入・切り捨て・切り上げ)が基幹システム側と食い違って1円ずれる問題とは、原因が別です。そちらは受注データの金額が1円合わないの記事で整理しています。「1円」ではなく、単価の小数の分だけ金額が大きくずれているときは、この記事の表示桁数を疑います。

重量・入数・容積の数字が変わる

重量や容積、ケース入数のような数字も同じです。「0.25kg」が「0.3」になれば、運賃の計算や在庫の数量換算がずれることがあります。

もう一度Excelで開いて保存すると、元に戻せなくなる

いったん「13」と書かれたCSVを、Excelで開き直して上書き保存しても、「12.75」には戻りません。CSVの中にはもう「13」しか残っていないからです。元の値は、表示形式を変える前の.xlsxのブックにしか残っていません。CSVを作業用のファイルとして開いたり閉じたりを繰り返すと、どこで桁が消えたのか分からなくなります。

CSVに桁が残っているかを確かめる

Excelで開き直すと、また表示形式の影響を受けて見え方が変わることがあるため、確認はExcelを通さずに行います。

テキストエディタでCSVを開く

保存したCSVファイルを、メモ帳などのテキストエディタで開きます。単価の列に「12.75」と書かれていれば桁は残っています。「13」や「12.8」になっていれば、保存の時点で桁が消えています。

全部の行を見る必要はありません。小数を持つ単価の品を1〜2行選んで、Excelの数式バーに出る値と、テキストエディタで見える値が同じかを見比べます。

数式バーと表示を見比べる

保存する前のExcelでも、単価のセルを1つ選び、数式バーの数字とセルの表示が同じかを見ておくと、表示桁数を減らしているかどうかに気づけます。数式バーが「12.75」、セルが「13」なら、そのまま保存すると桁が消える可能性があります。

送る前の防ぎ方

取込先が受け付ける桁数まで、表示桁数を増やしてから保存する

CSVに保存する前に、単価・重量などの列を選び、表示形式の「小数点以下の桁数」を、取込先が受け付ける桁数にそろえます。基幹システムによって、単価は小数2桁まで、重量は3桁まで、のように受け付ける桁数が決まっていることがあります。取込先の項目仕様(CSVのレイアウト表)で確認してください。

印刷用に小数を隠して見やすくしていたブックの場合は、印刷用のシートと取込用のシートを分けておくと、保存のたびに表示形式を切り替えずに済みます。

丸めたいなら、表示ではなく値で丸める

「単価は小数1桁で渡す」と決まっている場合でも、表示形式で桁を隠すのではなく、ROUND関数などで値そのものを丸めておくと、Excelの中の計算とCSVの中身が一致します。表示形式で隠したままだと、Excelの金額は「12.75」で計算され、CSVの単価は「12.8」で書かれる、という食い違いが起きます。

丸め方(四捨五入か切り捨てか)は取込先や取引先との取り決めに合わせます。値で丸めると、どの時点で丸めたかがブックの数式に残るので、あとから確かめやすくもなります。

元のブックは.xlsxで残し、CSVは送る用のコピーにする

作業用のブックは先に.xlsxで保存してから、CSVを書き出します。CSVは送る用のコピーと割り切り、修正が必要になったら.xlsx側を直してからCSVを書き出し直すと、消えた桁を取り戻せなくなる心配がありません。CSV保存のときに出る警告については、「一部の機能が失われる可能性があります」の警告の記事で整理しています。

「見えているとおりに保存される」という同じ仕組みの盲点

ExcelからCSVを作るときは、表示の仕方がそのまま中身に影響する盲点がほかにもあります。

どちらも、CSVを送る前にテキストエディタで中身を一度見ておけば気づけるという点で、この記事の確かめ方と共通しています。ほかのCSV取込エラーの対処は、基幹システムへのCSV取込でよくあるエラーと対処法でまとめています。

まとめ

  1. 単価や重量の小数がCSVで消えたら、Excelの表示形式で小数点以下の表示桁数を減らしていなかったかを疑う
  2. Excelの中では正しく計算されていても、CSVには見えている桁までしか書かれないことがある
  3. 桁が消えると、金額が単価の小数の分だけずれる。CSVをExcelで開き直して保存しても元には戻らない
  4. 確認はテキストエディタでCSVを開き、Excelの数式バーの値と見比べる
  5. 保存前に表示桁数を取込先の桁数にそろえる。丸めたいときは表示ではなくROUND関数などで値を丸める。元のブックは.xlsxで残す

手前味噌の紹介

この記事を書いているのは、注文書特化サービス注文書係(ちゅうもんしょがかり)の運営者です。FAX・手書きの注文書をアップロードするとAIが下書きを作り、担当者は自信のない項目だけを確認して確定します。転記にかかる時間を1/10程度に圧縮することを狙ったサービスです。

注文書係は、注文書から取引先名・受注日・注文番号と、明細の品番・品名・数量・単位・単価を読み取り、取込先に合わせた列順でCSVに出力します。出力されたCSVをExcelで開いて加工・上書き保存すると、この記事と同じ表示形式の影響を受けることがあるため、加工が必要なときは元のCSVを残しておくと安心です。また、取込先が受け付ける小数の桁数は基幹システム側の仕様で決まるため、最初の取込では、この記事の手順で単価の桁がそのまま届いているかを確かめてみてください。

無料トライアル(30枚または14日間、クレジットカード登録不要)で、実際にお使いの帳票との相性を確かめてみてください。

よくある質問

Q. Excelでは単価が12.75と入っているのに、CSVにしたら13になったのはなぜですか?
表示形式で小数点以下の表示桁数を減らしていた可能性があります。CSVは値だけを入れる形式で、表示形式で桁を減らした状態で保存すると、見えている桁までしか残らないという報告があります。画面に「13」と見えていれば、CSVにも「13」と書かれることがあります。
Q. CSVに小数の桁が残っているかは、どうやって確かめればいいですか?
保存したCSVをメモ帳などのテキストエディタで開き、小数を持つ単価の品を1〜2行選んで、Excelの数式バーに出る値と同じかを見比べます。Excelで開き直すと表示形式の影響で見え方が変わることがあるため、確認はExcelを通さずに行います。
Q. 桁が消えたCSVをExcelで開き直せば、元の値に戻せますか?
戻せません。CSVの中には消えたあとの数字しか残っていないためです。元の値は表示形式を変える前の.xlsxのブックにしか残っていないので、作業用のブックは.xlsxで保存してからCSVを書き出し、修正は.xlsx側で行うようにします。
Q. 単価を小数1桁で渡したい場合は、表示形式で桁を減らせばいいですか?
表示形式で桁を隠すのではなく、ROUND関数などで値そのものを丸めておくと、Excelの中の計算とCSVの中身が一致します。表示形式で隠したままだと、Excelの金額は元の値で計算され、CSVの単価は丸めた値で書かれるという食い違いが起きます。

← コラム一覧へ戻る