CSV や TSV が持っているのは文字であって、型ではありません。それを開くものは、その文字が何を意味するのかを決めなければならず、Excel の推測は 4 つの決まった形で外れます。
よい知らせは、頼めば Excel は推測を丸ごと省いてくれることです。悪い知らせは、ファイルをダブルクリックすることが「頼む」に当たらないことです。
ダブルクリックの何が問題なのか
デスクトップからファイルを開くと、Excel にはダイアログが出ず、あなたに何かを尋ねる機会もありません。すべての列に既定の型判定を当て、変換し終わった結果を表示します。その時点で、識別子は数値に、コードは日付になっています。
見落とされがちな結果が 2 つあります。
- 画面を見る前に、被害はもう出ています。 「取り込みを取り消す」操作は存在しません。
- 壊しているのは保存ではありません。 保存は、すでに壊れた値をディスクに書き戻すだけです。ただしその時点で、元のファイルは存在しなくなります。
以下はすべて、Excel がデータを読む前にダイアログを 1 枚挟むための方法です。
Windows での取り込み手順
Microsoft 365 版、2021、2024 の Excel の場合。
- データ → データの取得と変換 → テキストまたは CSV から。
- ファイルを選びます。プレビューのダイアログが開き、重要な操作が 3 つあります。元のファイル、区切り記号、データ型検出です。
- データ型検出をデータ型を検出しないにします。
- 読み込み。
手順 3 が、このガイド全体を 1 つの設定に凝縮したものです。これは Excel にすべての列を文字列として扱うよう指示するもので、先頭ゼロの除去、15 桁での切り捨て、指数表記、日付変換を、1 クリックでまとめて無効にします。このダイアログを解説した記事の多くはこの項目に触れず、代わりに Power Query で列を 1 つずつ設定させようとします。
列ごとに指定したい場合——ほとんどの列は数値で、識別子の 3 列だけ文字列にしたい、というような場合——は「読み込み」ではなくデータの変換を選び、Power Query エディタで対象の列を選んで、型をテキストにします。既存の型変換の手順を置き換えるか尋ねられたら、現在のものを置換を選んでください。
古いウィザードも残っており、1 回きりの作業ならこちらのほうが速いと感じる人もいます。既定では隠れています。ファイル → オプション → データ → レガシ データ インポート ウィザードの表示 → テキストから (レガシ) で有効にすると、データ → データの取得 → 従来のウィザードの下に現れます。3 番目の手順で列を 1 つずつ選び、文字列として指定できます。
Mac の場合と、古いバージョンの場合
最近の Mac 版 Excel にも同じデータ → テキストまたは CSV からがあり、データ型検出の項目も同じなので、上の 4 手順がそのまま使えます。
それより古いビルドにはデータ → テキストファイルがあり、こちらは古いウィザードを直接開きます。3 段階の同じ流れで、列の型を指定するボタンは 3 番目の手順にあります。
どちらもない場合、いまでも通用する乱暴な手があります。開く前に拡張子を .csv から .txt に変えることです。Excel は .txt を黙って開きません。既定の解釈を持っていないからです。そのため取り込みウィザードに落ちて、こちらに尋ねてきます。拡張子に依存するものがほかにあるなら、あとで戻してください。
.tsv については、Windows では関連付けがないことが多く、ダブルクリックしても何も起きないか、テキストエディタが開きます。これはむしろ幸いです。取り込み経路しか道がない、ということだからです。
もう半分の問題、文字コード
型の変換は、取り込みが失敗する 2 つの道のうちの 1 つにすぎません。もう 1 つは文字コードで、日本語では文字化けとして現れます。
Windows の Excel は、指定がないまま区切りファイルを開くと、システムの ANSI コードページ——日本語環境では Shift_JIS(CP932)——を前提にします。UTF-8 のファイルをそう読めば、日本語は丸ごと崩れます。
避ける方法は 2 つあり、確実な順に並べるとこうなります。
- 取り込みダイアログで「元のファイル」を明示する。
65001: Unicode (UTF-8)を選びます。ファイルの中に何かが入っていることを前提にしないので、これが誠実な解決です。 - ファイルに UTF-8 の BOM を付ける。 先頭のこの 3 バイトが、Excel が自力で UTF-8 だと気づくための目印です。多くのツールが書き出し時に付けられますし、このサイトのエディタではチェックボックスとして用意しています。
BOM は無条件の得ではなく、取引です。Excel はそれを求めますが、それ以外の非常に多くの読み手は求めておらず、1 列目の見出しの先頭に見慣れない文字を 1 つ渡してきます。Excel で開く人に渡すファイルなら付けてください。プログラムに渡すファイルなら、付けないでください。
すでに画面が文字化けしているなら、検索と置換で直そうとしないでください。それがなぜ事態を悪くするのかは、壊れた TSV を直す方法で説明しています。
見るだけでいいとき
ファイルを開く理由は、編集ではないことのほうが多いはずです。値を 1 つ確かめる、行数を数える、書き出しが走ったことを確認する。そうした用途に対して Excel は重く、そして破壊的です。ここまで挙げた危険は、読むだけのつもりで一目見る場合にもすべて当てはまります。
その目的なら、文字を文字として見せてくれるものなら何でも構いません。テキストエディタでも、コマンドラインの head でも、型を持たない表でも。原則は 1 つだけです。使うものが、あなたのデータの意味について賢くあろうとしないこと。
ここでやる場合
このサイトのエディタはセルの値を文字列として読み込み、数値や日付には変換しません。ただし、区切り文字・引用符・文字コードの検出結果は確認が必要です。書き出す前に、表示されたセルと読み込み時の警告を確認してください。
ステータスバーには検出した入力の文字コードを表示します。TSV・CSV は常に UTF-8 で保存します。たとえば Windows-1252 の café は、同じ文字を持つ UTF-8 のテキストになります。検出した BOM は初期設定で UTF-8 の BOM として付けます。書き出しダイアログで明示的に追加・削除できます。保存前に、推定された文字と変換内容を確認してください。
行き先がどうしても Excel なら、XLSX に変換してしまえば取り込みそのものを回避できます。本物のブックには型が入っているので、推測の余地が残りません。どちらの道でもアップロードはありません。ファイルを読み書きしているのは、あなたのブラウザです。