本日のご質問
・ある外部システムに取り込むためのCSVを作成したが、5桁までの制限のところに5桁しか数値を入れていないのに、桁あふれのエラーが発生してしまう。
CSVの元になるExcelファイルを確認して、ありがちな空白が挿入されていないか、Len関数で桁数をチェックしたがちゃんと5桁までに収まっています。
謎は書式設定にあり
何故だかわかりませんが、該当の列の書式を「標準」にしてからCSVにして外部システムに取り込むとエラーが発生しませんでした。
詳しく調べてみます。
A列は「数値」
B列は「標準」
の書式設定をしています。
この状態でCSVにエクスポートしてテキストエディタで見てみると
数値の書式設定をしたA列は数字の後に全てスペースが1つ含まれています。
どうやらこのスペースのせいで外部システム取込時の桁あふれを発生させているようです。
標準の書式設定のB列は空白が含まれていません。
確かにこれなら書式を「標準」に設定することで桁あふれが回避できているのは理解できました。
しかしそもそもなぜ「数値」だと余計なスペースが含まれるのでしょうか。
_ (アンダーバー)の謎
書式設定を「数値」に設定した後でユーザー定義に設定を変えると
「0_ 」
という表示形式が設定されています。
「0」は1桁の数字を表しています。
「_」(アンダーバー) は?
MicrosoftのHelpを見てみると
- スペースを追加する 表示形式の文字幅のスペースを挿入するには、下線 (_) を指定し、使用する文字をその後に付加します。たとえば、_) の順序で下線と右かっこを指定すると、正の値が、かっこで囲まれた負の値と正しく整列して表示されます。
「0_ 」の書式表示の意味は「 」(半角スペース)1つ分のスペースを行末に挿入
という意味になります。
確かに「数値」に設定した方A列は行末に余白があります。
このExcel上では書式表示でしか無い余白をCSVにエクスポートする際に実際の余白として出力しているために桁が増えてしまっているようです。
まとめ
ExcelからCSVにエクスポートする際には見た目がそのまま出力されてしまうということなのですが、普段はそういう動きをしているとわかっているのに、まさかこの余白までという感じでハマってしまいました。
・表示形式の「_」(アンダーバー) についてはこちらが詳しいです。 www.relief.jp
おまけ
今回のネタを書くにあたって調べてたら書式設定て思ってたより知らないことが多い印象。
もうちょっと深追いしてみたいです。