CSV をダブルクリックで開くと、表計算ソフトは「数字に見える値」を数値に変えます。 そのため、00123 は 123 に、長い番号は桁が失われ、12/2 のような値は日付になります。CSV のファイル自体は壊れていません。開くときに変換されています。

元の値 開いたあと 起きていること
社員番号 00123 123 先頭の0が消える(数値になる)
郵便番号 0600001 600001 同上
電話番号 09012345678 9012345678 同上
口座・カードなど19桁 1234567890123456789 1.23456789012346E+18 16桁目以降が失われる(数値の精度は15桁まで)
品番 1E5 100000 指数(1×10の5乗)と見なされる
12/2 日付(12月2日) 日付と見なされる

一度上書き保存すると、変換後の値で CSV が書き直されます。 0 が消えた CSV を別のシステムに取り込むと、データが壊れます。開いたら「上書き保存しない」が最初の対策です。

確認環境:同じ CSV を LibreOffice Calc 24.2 で数値として取り込み、変換される様子を再現しました。Excel の動作と設定は Microsoft の公式サポートページで確認しています(確認日 2026年10月10日)。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「CSVをExcelで開くと先頭の0が消える|日付・指数表示の防ぎ方」

再現:同じ CSV を開いたときの変化

社員番号,郵便番号,電話番号,JAN,品番,口座,カード
00123,0600001,09012345678,4901234567894,1-2,1234567890123456789,1E5

この CSV を、表計算ソフトで数値として取り込み、もう一度 CSV に書き出すと、次のようになりました。

社員番号,郵便番号,電話番号,JAN,品番,口座,カード
123,600001,9012345678,4901234567894,1-2,1.23456789012346E+018,100000
列 結果
社員番号・郵便番号・電話番号 先頭の0が消えた
口座(19桁) 指数表示になり、...6789 の部分が失われた(元に戻せない)
カード 1E5 100000 に変わった

開く側の対策:ダブルクリックで開かない

方法 手順(Excel for Windows) 向いている場面
データの取り込みで列を「文字列」にする 「データ」→「テキストまたは CSV から」→「データの変換」→ 列を選んで、データ型を「テキスト」→「閉じて読み込む」 毎回同じ形の CSV を開く
自動データ変換の設定を切る 「ファイル」→「オプション」→「データ」→「自動データ変換」 Microsoft 365・Excel 2024 を使っている
入力するセルを先に「文字列」にする セルを選んで Ctrl + 1 →「表示形式」→「文字列」 手で入力する場合(すでに入った値には効かない)
先頭に '(アポストロフィ)を付けて入力 '00123 と入力 手で1件ずつ入れる場合

自動データ変換の4つの設定

Microsoft 365 と Excel 2024 では、「ファイル」→「オプション」→「データ」→「自動データ変換」で、次の変換を止められます(項目名は Microsoft の英語版ページの表記を訳したもの)。Microsoft の公式ページでも、CSV ファイルを開いたときの変換が対象とされています。

設定 オフにすると
先頭のゼロを削除して数値に変換する 00123 を文字列のまま残す
長い数値の最初の 15 桁を保持する 16 桁以上の数値を文字列のまま残す(桁が失われない)
文字 "E" を囲む数字を指数表記に変換する 123E5 などを文字列のまま残す
文字と数字の連続した組み合わせを日付に変換する JAN1 などを文字列のまま残す

12/2 のような数字だけの日付らしい値は、この設定では止まりません。 Microsoft の公式ページでも「日付への変換を止める方法は無い」とされ、文字列の書式にしておく、先頭に ' を付けるなどの方法が案内されています。CSV を開く場合は、上の「データの取り込みで列を文字列にする」方法を使います。

消えた0を「見た目だけ」戻す方法と、その限界

方法 結果
表示形式「ユーザー定義」で 0000000 郵便番号のように桁数が決まっている値なら、0 を付けて表示できる。値そのものは数値のまま
=TEXT(A2,"0000000") 0 を付けた文字列を別の列に作れる
16桁以上の番号 失われた桁は戻らない。元の CSV から取り込み直す

桁数が決まっていない社員番号(0123 と 00123 が両方ある、など)は、見た目では区別できません。元の CSV から取り込み直します。

出力する側の対策:受け取る人が何もしなくても崩れない形で渡す

CSV を出力するシステムの側で手を打てば、受け取る人の操作に頼らずに済みます。

渡し方 先頭の0・桁 他のシステムでの読み込み 向いている場面
xlsx で、文字列のセルとして出す 崩れない xlsx を読めるなら問題ない 人が Excel で見るのが主な用途
CSV で ="00123" の形にする Excel では崩れない ="00123" という文字のまま読まれる Excel で見るだけの CSV
CSV のまま、取り込み方を案内する 開き方しだい 問題ない システム間の連携にも使う CSV

xlsx で、文字列のセルとして出す(Python)

from openpyxl import Workbook

rows = [("社員番号", "郵便番号", "電話番号", "JAN", "品番", "口座番号", "金額"),
        ("00123", "0600001", "09012345678", "4901234567894", "1-2", "1234567890123456789", 12800)]

wb = Workbook()
ws = wb.active
for r, row in enumerate(rows, start=1):
    for c, v in enumerate(row, start=1):
        cell = ws.cell(row=r, column=c, value=v)   # str はそのまま文字列として書かれる
        if isinstance(v, str):
            cell.number_format = "@"                # 書式も「文字列」にしておく
wb.save("output.xlsx")
読み込み直した結果(openpyxl 3.1.5)
('00123', 's', '@')  ('0600001', 's', '@')  ('1234567890123456789', 's', '@')  (12800, 'n', 'General')
  ↑ s = 文字列のセル、@ = 書式「文字列」。金額は数値のまま

この xlsx を表計算ソフトで開いて CSV に書き出しても、00123,0600001,...,1234567890123456789,12800 のまま崩れませんでした。番号は文字列、金額や数量は数値と、列ごとに型を分けて書くのがポイントです。番号まで数値で書き込むと、xlsx でも 0 は消えます。

CSV で ="00123" の形にする

社員番号,郵便番号
="00123",="0600001"

表計算ソフトは ="00123" を「文字列 00123 を返す式」として扱うため、0 が消えません。確認環境でも、表示は 00123・0600001 のままでした。

ただし、この CSV を他のプログラムで読むと、="00123" という文字がそのまま入ります。

import csv
print(next(csv.reader(open("eq.csv", encoding="utf-8")))[:2])   # 2行目
# ['="00123"', '="0600001"']

システムへの取り込みにも使う CSV では使わず、「Excel で見る用」と「システム連携用」を別のファイルにするのが安全です。

文字化けも一緒に起きるとき

日本語が文字化けする場合は、文字コード(UTF-8 か Shift_JIS か、BOM の有無)の問題で、0 が消える問題とは別の原因です。「データの取り込み」で開くと、文字コードも列の型も指定できるため、両方を一度に防げます。

確認の手順(チェックリスト)

順番 確認すること 方法
1 CSV 自体に 0 があるか メモ帳などのテキストエディタで開いて見る
2 上書き保存していないか 保存していたら、元の CSV を取り直す
3 開き方 ダブルクリックではなく「データの取り込み」で列を文字列に
4 Excel の版 Microsoft 365・2024 なら自動データ変換の設定
5 出力する側で直せるか xlsx で文字列のセルとして出す
6 16桁以上の番号 数値にした時点で桁が失われる。必ず文字列で扱う

よくある質問

Q. 一度消えた 0 は戻せますか。 A. 郵便番号(7桁)のように桁数が決まっていれば、=TEXT(A2,"0000000") で戻せます。桁数が決まっていない番号や、16桁以上の番号は、元の CSV から取り込み直します。

Q. 全部の列を文字列にすると、金額の合計が出せなくなりませんか。 A. なります。文字列にするのは番号の列(社員番号・郵便番号・電話番号・JAN・口座番号など)だけにします。上の Python の例では、金額は数値(12800、型 n)のまま書いています。

まとめ

  • 0 が消えるのは CSV ではなく、開いたときの変換。上書き保存すると CSV も壊れる
  • 16桁以上の番号は、数値にした時点で桁が失われ、戻せない
  • 開く側は「データの取り込み」で列を文字列に。Microsoft 365・2024 は自動データ変換の設定も使える
  • 12/2 のような日付らしい値は、設定では止まらない。文字列として取り込む
  • 出力する側はxlsx で文字列のセルとして出すのが確実。="00123" は Excel で見る専用
  • 番号は文字列、金額は数値と、列ごとに型を分ける

参考・出典

確認日はいずれも 2026年10月10日です。

  • Microsoft サポート「Set automatic data conversions」:https://support.microsoft.com/en-us/office/33d1d872-9926-4ef3-9364-492444d0c7ea
  • Microsoft サポート「Keeping leading zeros and large numbers」:https://support.microsoft.com/en-us/office/keeping-leading-zeros-and-large-numbers-1bf7b935-36e1-4985-842f-5dfa51f85fe7
  • Microsoft サポート「Stop automatically changing numbers to dates」:https://support.microsoft.com/en-us/office/stop-automatically-changing-numbers-to-dates-452bd2db-cc96-47d1-81e4-72cec11c4ed8

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「CSVをExcelで開くと先頭の0が消える|日付・指数表示の防ぎ方」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?