Quillfold

CSV を Excel で開くと文字化けする・数字が日付や別の値になる

Web の表を CSV で書き出して、ファイルをダブルクリックしたら Excel の表示がおかしい。ここには別々の 2 つの問題があり、直し方も違います。

  1. 文字化け: 日本語が記号の羅列になる。たとえば UTF-8 で書かれた「こんにちは」を Shift_JIS として読むと「縺薙s縺ォ縺。縺ッ」になります。文字コード(エンコーディング)の問題です。
  2. 値が変わる: 商品コードの「00123」が「123」になる、20 桁の番号が「1.23457E+19」になる、「JAN1」が日付になる。Excel が「数値や日付らしい」と判断した値を変換しているためです。

どちらも、CSV が「ただの文字の並び」で、各列が何なのかという情報を持っていないことから起きます。Excel は推測するしかありません。

文字化け:文字コード

CSV ファイルは文字をバイトの並びとして保存しています。「東」や「ü」を正しく表示するには、どの文字コードで書かれているかを Excel が知る必要があります。Web のデータのほとんどは UTF-8 です。UTF-8 のファイルは、先頭に「このファイルは UTF-8 です」という印の 3 バイトを付けられます。これを BOM(バイト オーダー マーク)と呼びます。

Microsoft のサポート記事「Excel で CSV UTF-8 ファイルを正しく開くには」(2026年10月7日に確認)には、次のように書かれています。「UTF-8 でエンコードされた CSV ファイルは、BOM (バイト オーダー マーク) で保存されている場合、通常どおり開くことができます。」BOM がない場合は、「データ」タブからテキスト/CSV として取り込む方法(英語版の表記では Data > Get Data > From File > From Text/CSV)か、従来のテキスト ファイル ウィザードで開くよう案内しています。

つまり直し方は 2 つです。

  • ファイルを作る側: CSV を「BOM 付きの UTF-8」で保存します。書き出す道具に BOM の設定があれば、オンにします。
  • 人からもらったファイルを開く側: ダブルクリックで開かず、「データ」タブからテキスト/CSV として取り込みます。

値が変わる:Excel の自動変換

Microsoft のサポート記事「Import or export text (.txt or .csv) files」(英語、2026年10月7日に確認)には「When Excel opens a .csv file, it uses the current default data format settings to interpret how to import each column of data.」とあります。CSV を開くと、Excel は既定の設定に従って各列の値を解釈します。

Microsoft 365 と Excel 2024(Windows・Mac)では、このうち 4 種類の変換をオフにできます。Microsoft のページ「自動データ変換を設定する」に載っている例は次のとおりです。

設定Microsoft のページにある例
数値テキストから先頭のゼロを削除して数値に変換する「00123」→「123」
数値データを 15 桁の精度に切り詰め、指数表記で表示される数値に変換します「12345678901234567890」→「1.23457E+19」
文字 “E” を囲む数値データを指数形式に変換する「123E5」→「1.23E+07」
連続した文字と数字の文字列を日付に変換します「JAN1」→「1月1日」

場所は次のとおりです。

  • Windows: 「ファイル」→「オプション」→「データ」→「自動データ変換」
  • Mac: 「Excel」→「環境設定」→「編集」→「自動データ変換」

Microsoft 365 Insider のブログによると、この設定が入ったのは Windows のバージョン 2309(ビルド 16808.10000)、Mac のバージョン 16.77(ビルド 23091003)以降です。「自動データ変換を設定する」のページは、変換が起きる場面として、.csv や .txt ファイルを開くとき、入力するとき、外部からコピーして貼り付けるときなどを挙げています。Web の表をコピーして Excel に貼り付けたときも、CSV を開いたときと同じ変換を受けるということです。

「1-2」「3/4」のような値が日付になる動きについては、Microsoft のこのページには例として載っておらず、4 つの設定のどれで止められるかも書かれていません(2026年10月7日確認)。こうした値を守りたいときは、次に書く XLSX で書き出すのが確実です。

また、どの設定にしても、1 シートは 1,048,576 行まで、1 セルは 32,767 文字までです(Microsoft「Excel specifications and limits」、2026年4月13日)。

「=」「+」「-」「@」で始まるセル

CSV の中の「=」「+」「-」「@」で始まるセルは、表計算ソフトに数式として扱われることがあります。データが自分の管理していない Web ページから来る場合、これは危険になりえます。OWASP はこれを「CSV Injection」(Formula Injection)と呼び、数式の始まりとなる文字として、この 4 つにタブと改行(CR)を加えています。

一般的な対策は、そうしたセルの先頭にアポストロフィ(‘)を付けて、文字として扱わせることです。

いちばん簡単な対処:Excel には CSV を使わない

XLSX ファイルは、セルごとに「これは数値」「これは文字」という種類を持っています。Excel は推測せずにそのまま開くので、文字コードの判定も値の変換も起きません。Excel で使うデータなら、できるだけ XLSX で書き出し、CSV はほかのソフトやシステム向けにとっておくのがおすすめです。

方法ごとの違い(2026年10月時点)

  • コピー&ペースト: 貼り付けたデータにも Excel の自動変換がかかります(上記の Microsoft の説明)。
  • Excel の「データ」タブからテキスト/CSV として取り込む: BOM のない UTF-8 の CSV を開く方法として Microsoft が案内している手順です。
  • Google スプレッドシート: 数値や日付の扱いは独自のルールで、このガイドの対象外です。
  • Instant Data Scraper: 掲載情報に「Excel or CSV file (XLS, XLSX, CSV)」に保存できるとあります(2026年10月7日に確認)。
  • Table Capture: 掲載情報では「Download tables directly as an Excel spreadsheet or as a CSV file」が有料版の項目で、無料版の項目はクリップボードへのコピーと Google スプレッドシートへの書き出しです(2026年10月7日に確認)。

拡張機能どうしの違いと、相手のほうが向いている場合は「Instant Data Scraper と TableHarvest の違い・使い分け」にまとめています。

TableHarvest でできること

TableHarvest は私たちの拡張機能です。現在の版の初期設定は次のとおりで、自動テストで確認しています。

  • 無料プランで XLSX: XLSX・CSV・TSV・JSON・Markdown・コピーのすべてを無料で使えます。
  • XLSX では「はっきりした数値」だけを数値にする: 15 桁以内、先頭に 0 がない、指数表記でない、「1.000」のような区切りでない値だけを数値として書き、それ以外は「00123」も 20 桁の番号も「123E5」も「JAN1」も、ページの表示どおり文字として書きます。XLSX に数式は書きません。Excel の上限の 32,767 文字を超えるセルは「…」で切ります。
  • BOM 付きの CSV: 「Excel 向け(BOM 付き)」が初期設定でオンなので、ダブルクリックで開いても UTF-8 として読まれます。
  • 数式ガード: CSV・TSV・コピーでは初期設定でオンです。「=」「+」「-」「@」、タブ、改行で始まるセルの先頭にアポストロフィを付けます。「-12.5」や「+81 3 1234 5678」のような、ただの数値や電話番号はそのままにします。
  • 貼り付け用のコピー: 形式が CSV か XLSX のときは、表計算ソフトに貼ると列に分かれるタブ区切りでコピーします。ただし貼り付けたデータには Excel の自動変換がかかるので、「00123」のような値を守りたいときは XLSX をダウンロードしてください。
  • Pro の整形: 通貨記号や桁区切りの除去、「(1,234)」をマイナスとして、「%」を割合として、全角数字を半角として読み、本物の数値にします。日付は ISO 形式(2026-10-07)にそろえます。「05/10/2026」のように月日の順番が決められない日付は、同じ列のほかの値から順番が分からない限りそのままにします。

TableHarvest は Shift_JIS などの古い文字コードでは書き出しません。CSV は常に UTF-8 です。

これが要らない場合

  • CSV がすでに手元にあって、開ければよいだけ:Excel の「データ」タブからテキスト/CSV として取り込むか、「自動データ変換」の設定で不要な変換をオフにしてください。
  • データの行き先が Excel ではなく、Google スプレッドシートやデータベース、プログラム:ふつうの UTF-8 の CSV で問題ありません。

根拠

2026年10月7日に確認。

ガイドの一覧