CSVファイルとExcelの落とし穴

業務用アプリケーションは、CSVファイルにデータを出力する機能がついていることがよくあります。
「一度データをファイルの形にしてから、別のアプリケーションに読み込ませてデータを移す」
というのが主な使い方になります。

ExcelでもCSVファイルを取り扱うことができ、通常のExcelファイルと同じ感覚で使用することが出来ます。

テスト
Excelのアイコン 見た目も似ています

ところが、CSVファイルを本当にExcelファイルと同じように扱ってしまうと――

「せっかくデザインを見やすく変えたのに元に戻ってしまった」
「正常に取り込めない」「商品コードが変わってしまった」

――と、思わぬ弊害につながってしまうおそれがあります。
なぜこのようなことが起きてしまうのでしょうか。

対処法も含め、考えてみたいと思います。

 

 

 

 

ExcelでCSVを読み込んだときに何が起きるか

Excelには、自動的に書式を判断して設定する機能があります。
CSVファイルを読み込んだ際に「これは数値っぽいデータだな」と、
Excelが判断し、書式を自動的に設定します。

Excelファイルはセルごとに書式が設定されています。
用途に合った書式を選択することで、より分かりやすい形式でデータを表示できるというものです。

それぞれの書式による変化の例
それぞれの書式による変化の例(実際の入力値は全て50000.1です)

しかし、この「自動的に判断する」という部分に不都合があり、判断が正確でない場合があります
本来の値別の値に書き換えてしまうのです。

例えば、「000001」のような商品コードのデータを読み込んだ時に、
Excelは「これは全部数字だから数値だ」と判断してしまいます。

その結果、Excelは「000001」を「1」に変換して読み込みます。
数値ならば「000001」と「1」はイコールであり、0は余計だからです。
このCSVファイルを使って商品取り込み処理を行うと、
1」という別の商品コードを持った新しいデータが出来てしまいます。

12345678901234567890」といった数値だけの長いIDのようなデータは、
1.23457E+19」と指数変換してしまいます。

日付でも「2023-04-06」といったデータは「2023/4/6」に書き換えてしまいます。

どれも、CSVファイルを正常に取り込めなくなる原因となります。

 

 

 

ExcelでCSVを保存したときに何が起きるか

CSVファイルを保存しようとしたときに、下記のような確認ダイアログが出ます。

保存前の確認ダイアログ
保存前の確認ダイアログ

一部の機能とありますが、いったい何が失われるのか。確かめてみます。

 

CSVファイルをExcel上で開き、下記のようなデータを入力しました。
計はSUM関数で合計しています。

保存前 (値は架空のものです)
保存前 (値は架空のものです)

そして、これを上書き保存します。

 

この段階では特に問題はないように思えますが、一度ファイルを閉じて、
再度このファイルを開くと、下記のような表示になります。

保存して閉じて再度開いた場合
保存して閉じて再度開いた場合

色情報は全て失われています。
中央寄せ、罫線、列や行の幅、セルの結合、フォントの情報もなくなってしまっています。
見た目からはわかりにくいですが、計のSUM関数が無くなり、合計後の値だけ残った状態です。
さらに、複数をシートを作っていた場合は、入力中だったシート以外は丸ごとなくなってしまいます。

 

なぜなくなってしまうのか。
その答えは、CSVファイルをメモ帳で読み込んでみるとわかります。

「CSVファイルを右クリック」→「編集」でメモ帳で読み込めます
「CSVファイルを右クリック」→「編集」でメモ帳で読み込めます

CSVファイルの正体はテキストファイル
ただいくつかの項目をカンマと改行で区切っただけのファイルです。

それもそのはず。CSVはCamma Separated Values(カンマで区切られた値)の略です。
カンマで列を、改行で行を表現しているだけであり、
それ以外の文字列は全て入力値とみなされます。
そのため、書式情報を持つことができないのです。

 

 

どうすればExcelでCSVファイルを正しく取り扱えるか

ここまでの情報でネガティブなイメージが生まれてしまっているかもしれませんが、
CSVファイルはデータの管理が手軽に出来るファイル形式なのは間違いありません。

ExcelでCSVファイルを正しく読み込む方法はちゃんと用意されています。
以下はExcel 2016での手順となります。

1. 「ファイル」タブから「新規」を押し、空白のブックを開く
2. 「データ」タブの「外部データの取り込み」から「テキストファイル」を選択
3. 読み込ませたいCSVファイルを選ぶ
4. 「次へ」を押す
5. 「区切り文字」の中から「カンマ」にチェックを入れて「次へ」を押す
6. データのプレビュー欄で列をクリック
  列のデータ形式の「G/標準」を「文字列」に選択し直す
  (これを全列分くりかえしてから「完了」を押す)
7. 「OK」を押す

文字だけではわかりにくいため、以下に画像付きの手順を示します。

1.「ファイル」タブから「新規」を押し、空白のブックを開く
1.「ファイル」タブから「新規」を押し、空白のブックを開く

 

2.「データ」タブの「外部データの取り込み」から「テキストファイル」を選択
2.「データ」タブの「外部データの取り込み」から「テキストファイル」を選択

 

3.読み込ませたいCSVファイルを選ぶ
3.読み込ませたいCSVファイルを選ぶ

 

4.「次へ」を押す
4.「次へ」を押す

 

5.「区切り文字」の中から「カンマ」にチェックを入れて「次へ」を押す
5.「区切り文字」の中から「カンマ」にチェックを入れて「次へ」を押す

 

6.データのプレビュー欄で列をクリック、列のデータ形式の「G/標準」を「文字列」に選択し直す(これを全列分くりかえしてから「完了」を押す)
6.データのプレビュー欄で列をクリック、列のデータ形式の「G/標準」を「文字列」に選択し直す(これを全列分くりかえしてから「完了」を押す)

 

テスト
7.「OK」を押す

こうすると、Excelファイル上にCSVファイルのデータを正しく転写することができます。

 

 

実際にやってみます。
そのまま開いてしまうと別の値になってしまうCSVファイルを用意します。

テスト
読み込みテスト用CSVファイルの中身

上記のCSVファイルを、直接ダブルクリックして開いた場合と、
先の方法で読み込んだ場合とで見比べてみます。

直接CSVファイルをダブルクリックして読み込んだ場合
直接CSVファイルをダブルクリックして読み込んだ場合
上記手段でCSVファイルを読み込んだ場合
上記手段でCSVファイルを読み込んだ場合

正しく読み込むことが出来ました。

CSVファイルを専門に扱える便利なフリーソフトなどもあるのですが、
未指定のフリーソフトの導入が禁止されていたりなど、Excelしか使えない状況も多々あります。
覚えておけば、役に立つ時が来るかもしれません。

他にも下記情報を投稿していますので、興味がございましたらご覧ください。

エクスプローラでのファイル選択のしかたに、ちょっとした変化を
マウスホイールをタブブラウザでより効果的に活用する

(Visited 610 times, 1 visits today)