このページでは,Excelのデータをテキストファイルに落とし込む前後で問題になりやすい点を扱っています.

目次

  1. ExcelのシートをCSVやタブ区切りテキストで保存するとき
    1. 保存したい
    2. 保存したテキストファイルが一部文字化けしている
  2. CSVやタブ区切りテキストをExcelで開くとき
    1. 頭のゼロがなくなってしまった
    2. 数値が日付になってしまった
  3. 書き出したテキストファイルを別のシステムに読み込ませるとき
    1. セル内改行があったところで行ズレした

ExcelのシートをCSVやタブ区切りテキストで保存するとき

保存したい

Excelで「名前を付けて保存」を行います.
ファイル形式をCSVやタブ区切りテキストに指定することができます.
通常,Shift-JISでの書き出しとなります.

保存したテキストファイルが一部文字化けしている

Excelで「名前を付けて保存」を行うとき,UnicodeやUTF-8と付記されているCSVやテキストファイルを指定します.

CSVやタブ区切りテキストをExcelで開くとき

頭のゼロがなくなってしまった

CSVやタブ区切りテキストをExcelで開いたり,メモ帳からExcelにコピペすると,数値が入力されている各セルにおいて頭のゼロがなくなります.

これを防ぐには,次のようにします.

  1. ゼロが落ちると困るセル範囲を選択.
  2. 右クリックして「セルの書式設定」を選択.
  3. 「セルの表示形式」のタブで「文字列」を設定.
  4. メモ帳からデータをコピペする.

数値が日付になってしまった

これも上と同じです.
標準の表示形式だと,「3/4」は3月4日として認識されます.

書き出したテキストファイルを別のシステムに読み込ませるとき

セル内改行があったところで行ズレした

デリミタ・引用符・改行記号についての変数を設定できると思うので,使用する言語に応じて検索してみるとよいかと思います.
以下,なんらかの理由で手修正することになったり目視確認することになった場合のためのメモです.

Excelでセル内改行を用いたセルは,テキストファイルに吐き出した際,ダブルクオーテーションマークで括られます.
そして,ダブルクオーテーションマークの囲みの内部でそのまま改行されます.
逆に,このテキストファイルをExcelに戻せば,ダブルクオーテーションマークの囲みの中の改行は正しくセル内改行として復元されます.

セル内改行はダブルクオーテーションで囲まれる

しかしながら,同じテキストファイルを別のアプリケーション等に読み込ませると,ただのダブルクオーテーションマークと改行として認識されてしまうでしょう.
セル内改行があったところで通常の改行が入った扱いになってしまうのですから,別のアプリケーション等では行ズレを起こします.

Excelからテキストファイルを作る側は,予めExcelでセル内改行を除去,または,一定の規則(例えば最終的にhtmlファイルに流し込まれる予定なら<br>)で置換しておくのが望ましいといえます.

何らかの理由でExcelの元データを触れない場合は,別のアプリケーション等に読み込む前にテキストファイルを編集することになります.
ダブルクオーテーションマークの囲み内にある改行を単純に繋げれば良いわけではないことに注意してください.
Excelでセル内に通常の文字としてダブルクオーテーションマークが入力されていた可能性があります.

セル内に打鍵されていたダブルクオーテーションマークは,テキストファイルに落としたときに,記号の重ね打ちによってエスケープされます.
すなわち,「Excelのセル内にあるダブルクオーテーションマーク1つ」=「テキストファイル上のダブルクオーテーションマークの2連続打ち」として書き出されます.
したがって,ダブルクオーテーションマークが偶数個連続している箇所は,セル内にダブルクオーテーションマークが入力されています.

対して,セル内改行は囲みとして使われて途中に改行が入っているので,ダブルクオーテーションマークが奇数個連続しているところがセル内改行のあるセルの開始か終了箇所となります.
(例えば,Excelでセル内改行のあるセルのはじめの文字がダブルクオーテーションマークだった場合,吐き出したテキストファイルではセルの開始で1つ+エスケープされたダブルクオーテーションマークで2つの計3つが連続します.)

以上より,テキストファイル中のダブルクオーテーションマークは

  • 2n個:n個にする
  • 奇数回目の2n+1個:n個にして,以降の改行を適当につなげるという処理を開始
  • 偶数回目の2n+1個:n個にして,改行を適当につなげるという処理を終了

というルールで加工するのが正当です.