CSVをExcelで開くと先頭の0が消える原因と消さない読み込み方法
CSVをExcelで開いたときに郵便番号や商品コードの先頭の0が消える原因と、Power Queryで文字列として安全に読み込む手順を解説します。
結論:こうすれば解決します
CSVをExcelでダブルクリックして開くと、00123が123になることがあります。元のCSVが壊れているとは限りません。Excelがその列を数値だと判断し、数値には不要な先頭の0を表示しなくなるためです。
確実な対処法は、CSVを直接開かず、Excelの[データ]→[テキストまたはCSVから]で読み込み、対象列のデータ型を[テキスト]に指定することです。郵便番号、電話番号、会員番号、商品コードなど、計算しない番号は文字列として扱います。
- 元のCSVは上書きせず、コピーを作って作業してください。
- すでにExcelで保存し直した場合、失われた0を元の情報なしで特定できないことがあります。
- 16桁以上の番号は、先頭の0だけでなく16桁目以降が変わる可能性があるため、必ずテキストとして読み込みます。
CSVの先頭の0が消える原因
CSVは、値をカンマで区切ったテキストファイルです。セルの「文字列」「数値」といったExcel固有の書式をそのまま保存する形式ではありません。そのためExcelでCSVを直接開くと、Excelが各列のデータ型を自動判定します。
たとえば元のCSVに次のような値が入っていても、数値として解釈されると先頭の0が外れます。
| 用途 | CSV内の値 | 数値として開いた表示 |
|---|---|---|
| 郵便番号 | 0012345 |
12345 |
| 商品コード | 000812 |
812 |
| 電話番号 | 09012345678 |
9012345678 |
Microsoft公式情報でも、Excelが数値として扱うために先頭の0を自動的に削除すると説明しています。番号を原形のまま保持したい場合は、文字列として取り込む必要があります。
先頭の0を消さずにCSVを読み込む手順
以下は、Microsoft 365、Excel 2024、Excel 2021、Excel 2019、Excel 2016で案内されている[テキストまたはCSVから]を使う方法です。画面上の名称はバージョンによって少し異なる場合があります。
- CSVをダブルクリックせず、Excelだけを先に起動します。
- 空のブックを開き、上部の[データ]タブを選びます。
- [テキストまたはCSVから]を選択します。見当たらない場合は、[データの取得]→[ファイルから]→[テキストまたはCSVから]を確認します。
- 対象のCSVファイルを選び、[インポート]を押します。
- プレビューで区切り文字や文字化けがないか確認し、[データの変換]を選びます。
- Power Queryエディターで、先頭の0を残したい列の見出しを選択します。複数列はCtrlキーを押しながら選べます。
- [ホーム]または[変換]にある[データ型]→[テキスト]を選びます。
- 確認画面が出たら[現在のものを置換]を選びます。
- プレビューで
0012345のように0が残っていることを確認し、[閉じて読み込む]を押します。
財務省のCSV案内でも、[テキストまたはCSVから]で取り込み、Power Query上で問題のある列を[テキスト]へ変更する手順が示されています。
読み込み前に確認する簡単なテスト
元のCSVに0が残っているかを先に確認すると、Excelの読み込みで消えたのか、ダウンロード時点ですでにないのかを切り分けられます。
- CSVをコピーします。
- コピーしたファイルをメモ帳などのテキストエディターで開きます。
- 対象の郵便番号や商品コードを検索します。
- テキスト上で
0012345と残っていれば、元データは残っています。Excelへ文字列として読み込み直せます。
テキスト上でも 12345 になっている場合は、そのCSVだけから本来いくつ0があったか判断できません。CSVを出力したサービスから再ダウンロードするか、元システムのデータを確認してください。
すでにExcelで開いて0が消えた場合
まだ保存していない場合
そのExcelファイルを保存せずに閉じ、元のCSVを[テキストまたはCSVから]で読み込み直します。元CSVを変更していなければ、先頭の0は残っている可能性があります。
保存してしまった場合
まず元CSVのコピーや再ダウンロードが可能か確認してください。ExcelでCSVを上書き保存した後は、消えた桁数の情報がファイルに残っていない場合があります。
すべて7桁の郵便番号など、本来の桁数が確実に決まっているデータなら、Excelの表示形式やTEXT関数で0を補えます。たとえばA2の値を7桁にするなら =TEXT(A2,"0000000") です。ただし、これは決まった桁数を使って0を補う処理です。元データを復元した証拠にはなりません。
セルの表示形式を文字列に変えるだけでは遅いことがある
CSVを直接開いた後でセルの表示形式を[文字列]に変えても、すでに数値化された値の先頭0は自動では戻りません。Microsoftの案内でも、書式設定はそれ以前に削除された先頭0を復元しないと説明されています。
先頭0を守るには、値がExcelへ入る前、つまりインポート時点で列をテキストに指定することが大切です。
16桁以上のIDは特に注意
Excelの数値精度は15桁までです。16桁以上の会員番号、カード番号、管理IDなどを数値として取り込むと、16桁目以降が0に置き換わることがあります。先頭0を補うだけでは直せません。
長い番号は計算対象ではないため、最初からテキストとして読み込んでください。元データを失わないよう、読み込み後に先頭・末尾の値を元CSVと照合するのが安全です。
再びCSVとして保存するときの注意
作業後のデータをCSVで保存すると、Excelのセル書式はCSVに保持されません。別の人がそのCSVをダブルクリックして開けば、同じ自動変換が再び起こる可能性があります。
- Excelで使い続けるなら、作業用ファイルは.xlsx形式で保存する。
- CSVで受け渡す場合は、受け取る人にも[テキストまたはCSVから]で読み込んでもらう。
- 保存後のCSVをテキストエディターで開き、重要な番号が残っているか確認する。
よくある質問
先頭にアポストロフィを付ければ直りますか?
Excelへ手入力する場合は、'00123 のように入力すると文字列として扱えます。ただし、CSVのデータ自体にアポストロフィを加えると、他のシステムでは文字として残る場合があります。既存CSVの安全な読み込みには、列のデータ型をテキストに指定する方法が適しています。
表示形式を「0000000」にすれば問題ありませんか?
7桁固定など、桁数が確実でExcel内の表示だけを整える用途なら使えます。ただし、すでに失われた0を正確に復元できるとは限らず、CSVへ書式も保存されません。識別番号の保持には文字列での取り込みが安全です。
文字化けも同時に起きています
[テキストまたはCSVから]のプレビューで文字コードを選び直します。財務省は、例としてUTF-8の「65001」と日本語Shift-JISの「932」を案内しています。文字化けを解消してから[データの変換]へ進み、番号列をテキストにします。
まとめ
CSVの先頭0が消える主な原因は、Excelが番号を数値へ自動変換することです。元CSVをコピーし、Excelの[データ]→[テキストまたはCSVから]で開き、郵便番号や商品コードの列を[テキスト]へ変更してください。すでに上書きした場合は推測で補わず、元システムから再取得できるか確認します。