プログラマ38の日記

主にプログラムメモです。

CSV: Excelで開く際に、ゼロサプレスや日付変換を回避する

CSVファイルは、大体Excelに関連付けがされていてダブルクリックするとExcelで開きます。
Excelで中身を確認できるのはとても便利ですが、次のようになってしまい使いづらいことがあります。
CSVの文字は「0001」なのに、Excelでは「1」となる
CSVの文字は「2000-01」なのに、Excelでは日付の「2000/1/1」となる

この現象は数式扱いにすると回避できます。


テキストが変換されてしまうCSVの中身

"0001","2000-01"

Excelで開いた場合の表示

f:id:crmprogrammer38:20180711102325p:plain
ゼロサプレスされるのと、勝手に日付変換されてしまいます。


テキストを数式扱いにしたCSVの中身

="0001",="2000-01"

Excelで開いた場合の表示

f:id:crmprogrammer38:20180711102436p:plain

セルは数式の値でcsvの文字列がそのまま表示されます。

 

気をつけること

ただし、数式扱いにしなければ正しく表示される値でも、数式扱いにすると表示がおかしくなる場合があります。

おかしくなるのは、文字列中にカンマ(,)や改行( )がはいる場合です。


通常のCSV

"000,000,000","AAAAA
BBBBB"

Excel表示

f:id:crmprogrammer38:20180711102214p:plain
正しく表示されます

 

数式に変更

="000,000,000",="AAAAA
BBBBB"

Excel表示

f:id:crmprogrammer38:20180711102123p:plain
表示が崩れてしまいます。


この現象を回避するため、テキスト内のカンマと改行も数式で表現しておく必要があります

="000" & char(44) & "000" & char(44) & "000",="AAAAA" & char(10) & "BBBBB"

 ※カンマはchar(44) で、改行はchar(10)で表現しています。

Excel表示

f:id:crmprogrammer38:20180711102106p:plain

最後に

テキストを数式扱いしたCSVは連携用途で扱えません、Excelでの表示用途に限定したやり方になります。

業務ユーザにCSVを配布した際にゼロサプレスされては困る、勝手に日付変換されたら困る項目に限定して数式扱いにするのがいいのかなと思います。