この記事に出てくる用語
- CSV … 値をカンマ(,)で区切った、文字だけのファイル。名簿やデータ出力に使われる
- ダブルクォート … 半角の二重引用符
"。CSVでは"0120001"のように値を囲む - 文字コード … 文字をファイルに記録する方式。Shift-JISやUTF-8などがある
- BOM(ボム) … UTF-8の先頭に付ける目印。「BOM付き」と「BOMなし」の2種類がある
- シリアル値 … Excelが日付を管理する通し番号。2026年に開くと
1-2は46024になる
この記事は3つの状況に向けて書いています
| いまの状況 | 読むところ |
|---|---|
| 開いたら値が変わっていた・文字化けしていた | 「開いただけなら、元のファイルは無事です」 |
| 壊れた状態で、もう上書き保存してしまった | 「すでに保存してしまった場合」の節 |
| CSVを作って人に渡す側で、壊れない形にしたい | 「効く対策」と「状況別の選び方」の節 |
結論:ダブルクリックで開くと4種類の壊れ方をする
CSVをダブルクリックしてExcelで開くと、値が勝手に変わります。壊れ方は大きく4種類です。
| 壊れ方 | 例 |
|---|---|
| 先頭の0が消える | 0120001 → 120001 |
| 日付に変わる | 1-2 → 1月2日 |
| 長い数字が別の数字になる | 1234567890123456 → 1.23E+15 |
| 文字化けして列がずれる | 「コード」→「繧ウ繝シ繝・」 |
上の3つはExcelが値の種類を推測して変換するために起き、4つ目は文字コードによって結果が分かれます。
よく紹介される「値をダブルクォート(半角の ")で囲む」対策では、この変換は止まりません。
止まるのは「値の頭に = を付ける」方法で、使えるのはCSVを作る側だけです。
受け取る側は、[ファイル]→[オプション]→[データ]で自動変換を止めます。
ただし公式の説明と対応しているのは先頭の0と長い数字で、1-2 の日付化は止まらない可能性が高いです。
開いただけなら、元のファイルは無事です
Excelで開いて表示が変わっていても、CSVファイル本体はまだ書き換わっていません。
Excelは開くときにファイルを読むだけで、書き込みは保存したときに起きます。
元のデータが失われるのは、壊れた状態のまま上書き保存したときです。
変な表示に気づいたら、保存せずに閉じてください。元のCSVはそのまま残っています。
何が壊れるか|値の変換
対策をせずに開くと、次のようになります。
| CSVに書いた値 | Excelでの表示 | セルの中身 |
|---|---|---|
0120001(郵便番号) | 120001 | 120001(数値) |
1-2(商品コード) | 1月2日 | 46024(日付のシリアル値) |
1234567890123456(16桁の管理番号) | 1.23E+15 | 1234567890123450 |
03-1234-5678(電話番号) | 03-1234-5678 | そのまま(文字列) |
商品コードの 1-2 は「2026年1月2日」になり、元の表記は残りません。
何年になるかは、開いた年で決まります。
1.23E+15 は「1.23×10の15乗」という意味の表記です。
セルの中身は 1234567890123450 で、下1桁が失われています。表示形式を数値に直しても戻りません。
電話番号が無事なのは、数値としても日付としても読めない形だからです。
同じハイフン入りでも 1-2 は日付として読めるので変換されます。「ハイフンなら安全」ではありません。
自分のデータのどれが危ないか
次の形に当てはまる値が、変換の対象になります。
- 数字だけで、先頭が0(郵便番号、ハイフン無しの電話番号、
001のような連番) - 数字とハイフンや斜線の組み合わせ(
1-2や4/5のような商品コード・枝番) - 16桁以上の数字(会員番号、システムの管理番号)
壊れているかを確かめる方法
メモ帳と見比べる手順
- 元のCSVを、Excelではなくメモ帳で開く(右クリック→[プログラムから開く]→[メモ帳]。一覧に無ければ[別のアプリを選択])
- メモ帳は中身を文字のまま表示するので、そこに見えているのが本来の値です
- Excelの表示と見比べて、違っていれば変換が起きています
文字化けと列ずれ|同じUTF-8でも結果が分かれる
画面の日本語が読めない文字になっていない人は、この節は飛ばせます。
同じ内容のCSVでも、文字コードによって結果が分かれます。
| 文字コード | 結果 |
|---|---|
| Shift-JIS | 正常 |
| UTF-8(BOM付き) | 正常 |
| UTF-8(BOMなし) | 文字化けする。列の区切りも崩れる |
文字化けと同時に、列の区切りも崩れます。
たとえば3列2行のCSVなら、1行目の「コード」と「郵便番号」が1つのセルにまとまり、3つ目が空になることがあります。
2行目は3列のままです。化けた文字が隣のカンマを取り込むと区切りが1つ消えるので、ずれ方はデータによって変わります。
UTF-8には先頭に目印(BOM)が付いたものと付かないものがあり、「UTF-8にしたのに化ける」場合はBOMなしが考えられます。
化けたCSVを開ける形に直す
出力するシステム側で文字コードを選べるなら、Shift-JISかBOM付きUTF-8を選んでください。
手元で直すなら、メモ帳で保存し直します。
化けたCSVをメモ帳で直す手順
- 元のCSVのコピーを作っておく
- CSVをメモ帳で開く(ここで正しく読めていれば、文字コードの問題です)
- [ファイル]→[名前を付けて保存]を開く
- 保存ボタンの近くの文字コード欄で「UTF-8(BOM 付き)」を選んで保存する
- Excelで開き直し、文字化けと列ずれが消えていれば直っています
メモ帳でも化けて見える場合は直りません。出どころに文字コードを確認してください。
なぜ値が変わるのか
CSVは文字だけのファイルで、「この列は文字列」という情報を持っていません。
そのためExcelは、開くときに値の見た目から種類を推測します。
推測は開いた瞬間に起きるので、後から表示形式を「文字列」に変えても戻りません。
16桁で下1桁が失われるのは、Excelが数値を15桁までで扱うためです。
効かない対策|各値をダブルクォートで囲む
「値を " で囲めば文字列として読み込まれる」という説明をよく見かけます。
| 対策 | 郵便番号 0120001 | 商品コード 1-2 | 16桁の管理番号 |
|---|---|---|---|
| 何もしない | 120001 ✕ | 1月2日 ✕ | 1.23E+15 ✕ |
ダブルクォートで囲む "0120001" | 120001 ✕ | 1月2日 ✕ | 1.23E+15 ✕ |
「何もしない」と1つも変わりません。
CSVの決まりごとでは、ダブルクォートは「カンマや改行を含む値を1つにまとめる」ための記号です。
「この値は文字列として扱え」という指示ではないので、Excelは囲みを外してからいつもどおり推測します。
すでにダブルクォート付きで作っているなら、外す必要はありません。害はありません。
効く対策|各値の頭に = を付ける(副作用あり)
これはCSVを作る側が使う方法です。受け取ったCSVをExcelで開いてから付け直すことはできません。開いた時点で壊れているからです。
受け取る側の人は、次の節「自動変換を止める設定」へ。
="0120001" のように、ダブルクォートで囲んだうえで頭に = を付ける書き方です。
| 対策 | 郵便番号 0120001 | 商品コード 1-2 | 16桁の管理番号 |
|---|---|---|---|
= を付ける ="0120001" | 0120001 ○ | 1-2 ○ | 1234567890123456 ○ |
3つとも守られます。Excelが「文字列を返す数式」として読むためです。
セルの中身は数式 ="0120001" になり、xlsx形式で保存して開き直しても数式のまま残ります。
⚠️ CSVのまま保存し直すと、次に開いたときにまた壊れます
= 付きのCSVをExcelで開き、CSV形式のまま上書き保存すると、= が消えます。
Excelで加工して保存するなら、xlsx形式を選んでください。
使えるのは、渡す相手がExcelで開く場合だけです。
別のソフトに読ませると ="0120001" という文字がそのまま渡ります。
タブ文字を入れる方法は勧めません
タブ文字(Tabキーで入る空白)を各値の頭に入れる方法もあります。
3つとも保たれますが、見えないタブ文字がセルの先頭に残ります。
検索や突合で「同じはずなのに一致しない」原因になるので、勧めません。
自動変換を止める設定|先頭の0と長い数字には効く
2023年9月にMicrosoft 365(バージョン2309)で追加された「自動データ変換」で止められます。Excel 2024にもあります。
場所は [ファイル]→[オプション]→[データ]→「自動データ変換」。止められるのは次の4項目です。
- 先頭のゼロを削除して数値に変換する
- ロング数値の最初の15桁を保持し、科学的記数法で表示する
- 文字「E」を囲む数字を科学的記数法に基づく数値に変換する
- 連続する文字と数字を日付に変換する
このうち上に挙げた症状と対応するのは1と2です。1が0落ち、2が16桁の管理番号にあたります。
4が商品コード 1-2 の日付化を止めるかは、公式に書かれていません。
公式の例は JAN1 のような記号の無い形で、「JAN 1 や JAN-1 などは、なお日付として扱われることがある」とあります。
記号を含む 1-2 は、この設定では止まらない可能性が高いです。
CSVを開くときに「次のデータ変換を実行します」という画面が出ることもあり、そこで「変換しない」を選べます。
効いているかは 0120001 と書いたCSVを開いて確かめます。そのまま表示されれば止まっています。1-2 に効くかも、同じやり方で確かめてください。残る場合は、次の節へ進みます。
設定が無いExcelや、日付化が残るとき
定番の方法が2つあります。どちらもこの記事では手順まで扱いません。
- [データ]タブの取り込み機能でCSVを読み込み、列ごとに「文字列」を指定する方法
- 拡張子を .txt に変えてExcelで開き、出てくる画面で列ごとに型を指定する方法
試すときは、元のCSVのコピーで確かめてから使ってください。
状況別の選び方
| 状況 | 取る方法 |
|---|---|
| 受け取ったCSVを自分が見る・集計する | まず設定で自動変換を止める。日付化が残るなら[データ]タブからの取り込みへ |
| CSVを作って、Excelで開く人に渡す | 値の頭に = を付け、CSVのまま保存し直すと再発すると伝えておく |
| CSVを作って、Excel以外のソフトにも読ませる | = を付けない。Excelで開く人には設定か取り込みで守ってもらう |
| Excelで開いて加工した結果を残す | xlsx形式で保存する。CSV形式で上書きしない |
すでに保存してしまった場合
16桁の番号は復元できません。
下1桁が0になった値で保存されていて、元の値はどこにも残っていません。
出どころから、もう一度もらってください。
先頭の0は、桁数が決まっている値なら復元できます。
郵便番号なら7桁なので、足りない分の0を先頭に足せば戻せます。
0が消えた値に式で0を補う方法は、別記事「顧客リストの名寄せをExcelだけでやる手順」でも触れています。
日付に変わった値は、元が 1-2 だったのか 1/2 だったのかを「1月2日」から判別できません。
元の形式が決まっているなら組み立て直せます。確実なのは、もらい直すことです。
関連する作業
毎月届くファイルをExcelの集計につなぐ作業は、別記事「毎月のExcel転記を別ブックの参照でつなぐ前に」にまとめています。
この記事の確認範囲
- Windows版のExcelの話です。画面の名前は Excel 2024(日本語版)のものです
- 値の変換について書いているのは、表に挙げた4つの形です。他の値は同じ仕組みからの推測です
- 「自動データ変換」の設定は、バージョンによって項目名や並びが違うことがあります
- メモ帳の文字コード欄の名前も、Windowsのバージョンによって違うことがあります
- 文字化けについては、Shift-JISとBOM付きUTF-8なら正常に開けるところまでの話です。BOMなしのまま開かせる方法は扱っていません
- Googleスプレッドシート・LibreOfficeなど、Excel以外は対象外です
まとめ
- CSVをダブルクリックで開くと、先頭の0・
1-2のようなコード・16桁の番号・BOMなしUTF-8の文字が壊れる - 開いただけなら元のCSVは無事。失われるのは、壊れた状態で上書き保存したとき
- ダブルクォートで囲む対策では止まらず、止まるのは頭に
=を付ける方法 - ただし
=はCSVのまま保存し直すと消え、次に開いたとき再発する - 「自動データ変換」の設定は先頭の0と長い数字に対応する。
1-2の日付化は止まらない可能性が高い - 16桁の番号は、壊れた状態で保存すると復元できない


コメント