エクセルとCSVの関係

エクセルとCSVの変換 メモ

エクセルからCSVに書き出したり、CSVをエクセルで開いたりするときに、値の変化が生まれる時があります。

1.エクセルからCSVへのエクスポート

(1)エクセルの1つのセルの中にカンマ「,」があったり、ダブルクォーテーション「”]があったりした場合は、CSVに書き出すと、ダブルクォーテーションで囲まれた値となる。さらに値の中のダブルクォーテーションについては、エスケープ処理として「””」のように2つのダブルクォーテーションとして表示されます。

※エスケープ処理とは、マークアップ言語やプログラミング言語、スクリプト言語等で文字列を扱う際に、その言語にとって特別な意味を持つ文字や記号を、別の文字列に置き換えることです。

(2)エクセルの1つのセルの中に半角や全角の数字の前にシングルクォーテーション「’」を置くと、数字が文字列化しますが、このような状態でCSVにエクスポートした場合は、シングルクォーテーションは自動的にとれて、数字のみが半角もしくは全角の数字として書き出されます。この場合、先頭にゼロがついている数字であっても、値の両側にダブルクォーテーションは付かず、先頭にゼロが付いた状態でCSVファイルに書き出されます。

(3)上記の場合と同様に、セルの書式設定が「文字列」となっている場合も、同じようなことが言えます。

2.CSVをエクセルとして開いた場合

CSVファイルについては、エクセルとの関連付けがなされているため、CSVファイルを直接開くとエクセルが起動して開かれることがあります。

(1)CSVファイルには、カンマで区切られた値の両側にダブルクォーテーションがついている場合とついていない場合があります。エクセルからCSVとしてエクスポートした場合は、基本的にダブルクォーテーションは付かない形で書き出されますが、セル内の値にカンマ「,」やダブルクォーテーション「”」があった場合は、CSVに書き出される場合に、値の両側にダブルクォーテーションが付けられます。このため、CSV上では、ダブルクォーテーションがあるものとないものが混在することがあります。

(2)上記のようなCSVをエクセルで開くと、値の両側にダブルクォーテーションがついたものは、そのダブルクォーテーションは消去されて、内側の値のみが読み込まれますが、値の中のエスケープ処理されているダブルクォーテーション「””」は1つの「”」になって表示されます。

(3)先頭に0が付いた数字(半角数字、全角数字)は、通常では0が消えてしまうことがあります。この点については、(4)のように、最近のエクセルでは変換の有無を選択できるようになっています。

(4)最近のエクセルでは、このような先頭に0が付いた値については、これを数値に変換するかどうかの選択ダイアログが表示されるようになりました。

エクセルとCSVの変換

このダイアログで、「変換」ボタンを押すと、先頭にゼロが付いた数字はゼロが消されて通常の数字となります。

一方、「変換しない」ボタンを押すと、数字の先頭にシングルクォーテーション「’」が付加されて、文字としての数字となり、先頭の「ゼロ」は保持され、同時に全角の数字についても保持されます。

このダイアログの大本の設定は、エクセルのオプションの中にあります。

エクセルとCSVの変換

「オプション」の「データ」の中の一番下にある「自動データ変換」の項目の中の一番下にある「.csvファイルまたは同様のファイルを読み込む際に自動データ変換があれば通知する」というチェックボックスです。

このチェックボックスのチェックを外すと、何も警告もなしに、勝手に数字の変換が行われます。

(5)しかし、「変換しない」ボタンを押しても、このような例外をすり抜けてくる数字があります。それが日付に関する数字です。

「03/01」→「3月1日」
「03-01」→「3月1日」
「2024-04-01」→「2024/4/1」

という風に自動的に日付への変換が行われます。ただし、日付に変換されない数字もあります。

「0301」→「0301」
「20240330」→「20240330」

というように、途中に「/」や「-」がなければ、変換なしで読み込むことができます。

3.CSVから開くのではなく、エクセルからのCSV読込を利用すべきです。

現在のエクセルには「データ」タブの中に「テキストまたはCSVから」という読込ツールが用意されています。こちらを利用することで、正しいCSVからの読込が可能です。

この方法を使うことで、CSV上の値と全く同じ値として、エクセルに読込みを行うことができます。

タイトルとURLをコピーしました