エクセル(excel)の0が消えてCSVアップロード失敗して悲しむ人が居なくなればいい

こんにちは!夢はお風呂の広い家に住むこと!鷹Pです!

今回はwebやECの仕事をしていると必ず遭遇するエクセル(EXCEL)のCSV取り扱い問題について書きたいと思います。

そもそもどんな時にCSVデータをエクセルで開くのでしょうか?全商品に一律で同じ修正を入れるのであればエクセル以外でもやり方はあります。ですがこういったデータの場合はこうしたい!とか細かい指定をしたい時にはどうしてもエクセルの力を頼りたくなっちゃいますよね。

ですがエクセルさんはとても気の利くナイスガイなので、意図してない事までしてくれちゃったりします。

今日はそんなお話です。

0が消える

よくありがちなのが、"0000123"みたいなデータを入力したはずなのに、気がつけば"123"に代わってしまっているという現象です。これを専門用語的にかっこよくいうと0サプレス(ゼロサプレス)っていいます。サプレスには抑える、抑制する、みたいな意味があるらしいです。0を抑制してるんですね。かっこいいですね。

対となる単語でゼロパディングという言葉があります。0パディングは0サプレスと逆に0で規定の桁数まで埋めてしまうという意味です。約20年くらい前になりますかね・・・当時SEをしていた鷹Pはその0パディングという単語のかっこよさがすごすぎて、無駄に0パディングしといて!と言ってました。普通にゼロ埋めしといてで通じるのに。

かっこいいと思ってたんです、すみません。

はい、脱線しましたがゼロサプレス、ゼロパディングというのはデータを扱う時に非常に重要な役割を持っています。データベースとなる仕組み側が、桁数を固定で持っていたり、またはその0という数字自体に意味を持たせていたりするからです。なので例えば00123は数値としてみた時には123でしかないのですが、文字列としてみた時には00123なのですね。

ここがポイントなのですが、プログラミングやデータベースの世界等においてはデータ型というものが存在します。

文字列型、数値型など他にも色々あるのですが、それぞれの型によって認識の仕方が変わるんですね。

つまり文字列として認識した場合には00123は00123という数字としての意味をもたない文字でしかないのですが、数値型としてみた場合には00123は123番目であったり、123回目というような数字としての意味を持つ事になるのです。

そうして数字としての意味を持った場合に、00123というような数字はおかしいですよね?

だから数字として00123を表現する場合には頭の00を消す、0サプレスがかかります。

なんとなく何故0が消えたり埋まったりする理由であったり、その必要性についてご理解いただけたかと思います。もしご理解いただけてなければ今晩夢の中でお返事するのでテレパシー送っておいてください。

エクセルで0が消える理由は結局・・・

結局のところエクセルで0が消えてしまうのは何故なのか。

実はエクセルにもプログラミングでいうデータ型のような仕組みが存在しているんですね。

エクセルでは、「セルの書式設定・表示形式」という表現がされています。

これはまさに上述したプログラミングのデータ型のようなものです。セル単位で表示形式を通貨や日付、数値、文字列というような色々な形式を設定することが可能です。そして厄介なのが「標準」という設定です。

そう、勘の良いあなたはもう気づいてしまったかもしれませんね。あなたのその勘の良さは既に人類を超越していますね。世界を救うのはあなたかもしれません。

そうです、そもそもエクセルさんは表計算ソフトというカテゴリーにいます。基本は計算とかバンバンする用のツールなわけですね。そんな彼の中での表示形式「標準」は文字列ではなく数値としての表現に近い設定となるわけです。

なので標準の設定だと00123と入れても123になってしまうわけですよ!!!!これは実際にそのままエクセルに入力しても、CSVファイルをエクセルで単純に開いた場合も同じです。0サプレスがかかってしまうのです。

この機能はよく「大きなお世話」だって言ってる人がいるのですが、表計算ソフトとしての役割を考えれば別に大きなお世話ではないと言えるかもしれませんね。鷹Pはめちゃめちゃ大きなお世話だと思ってますけども!!!!!

どうすればエクセルの0が消えないのか

おっと待ってくれよ鷹Pさんよ!俺は昔街はずれの酒場でエクセルに00123って0埋めされたデータが入ってるのを見た事あるぜ!

そんな風に思ってる方もいるかと思います。おっしゃる通り、0埋め形式にすることも可能です。

そうです、表示形式で文字列を選んであげるのです!セルの形式が文字列であればそのまま00123の入力が可能なのですね。

他にも例えばデータソースとしてCSVをインポートする、みたいな方法でもいけるんですが、こないだ久しぶりにやってみたら新しいエクセルではパワークエリだとかいう名前の謎の仕組みが搭載されており、昔やっていたようにはできませんでした。勝手に背景色とかついてむごごごってなります。

またこのパワークエリに関しては別途調査していきたいと思います。

とりあえずインポートするのが無理な場合は、昔ながらのやり方にはなりますが、エクセルを全選択した上で表示形式を文字列に変更、その上で区切り文字をカンマに設定、CSVデータをエディタ等で開き、その内容をエクセルにコピペすることで00123という文字列の形でエクセルに取り込む事は可能です。

何故わざわざエディタで開くのかですが、普段意識することは少ないですが、コピペをするとエクセル等の場合、書式設定等の情報も一緒にコピーしちゃってるんですね。

それに対し、例えば昔ながらのsakuraエディタや秀丸などはプレーンなテキストとしての情報しか持っていないので、そのままエクセルに貼っても余計な書式がつかないのです。やっぱり古き良きエディタが正義やで!!!!

また、エクセルはそのまま開いただけだと区切り文字がタブになっています。tabキーのタブです。なのでcsvデータをそのままコピペすると一列に全部入ってしまうのですね。

なので先に区切り文字設定をカンマにしておく必要があるのです。

まとめ

エクセルで0が消える原因、わかっていただけたでしょうか?

実はアプロでも新メンバーはだいたいこれに引っかかってミスをする事が多かったです。

なので先にエクセルでのCSVの取り扱いについて、というような勉強会をしたりします。

CSVはECをやっているとフロント側でもバック側でも必ずといっていいくらい出てきます。

フロントでは商品登録やバリエーション登録、バックでは受注データの取り込みやら配送番号のインポート等、いたるところで使われる仕組みです。

CSVを全く使わないという選択肢はほぼ無いです。

今回は0が消えるという所にフォーカスをあてた話になりましたが、他にも指数表示であったり、あるパターンの数字が勝手に日付の形になってしまったりと、CSVをエクセルで編集する際には様々なトラブルリスクをかかえています。

そして少しややこしいデータの生成が必要な時はエクセルに頼らざるをえないのです。

ですが、上記のようなトラブルになるケースを知っている事で未然に防ぐことは可能なのです。

データの一部のみをエクセルで作って最低限のリスクにするなんて方法も良いかと思います。

ちょっとややこしい話にはなってしまいましたが、しっかり仕組みを押さえておくことで臨機応変に対応できるようになるかと思います。

前へ

受注管理システムとは

次へ

ECにおける決済方法の苦労した話