CSVの先頭ゼロ・長い管理番号をExcelで保持する方法|取り込みから再出力まで

CSVの管理番号を変えずに扱うには、元CSVを残し、管理番号の列を取り込み時点で文字列に指定します。 計算する金額は数値として取り込み、作業用はExcelブック(.xlsx)で保存します。相手にCSVを渡す場合は、書き出したファイルの番号と、受領側が読み込んだ後の番号を別々に確認してください。

「ExcelでCSVを開いたら先頭の0が消えた」「16桁の番号の末尾が変わった」というとき、表示を整えるだけでは元の番号を取り戻せません。まず原本を上書きせず、どの段階で変わったかを切り分けます。

この記事は、CSVを受け取って管理番号・商品コードなどを確認する担当者向けです。Microsoft公式に基づくWindows版Excelの手動取り込み手順と、legacy QueryTableで架空12行を確認した保存・再出力結果を紹介します。実際の日付の変換や、2つの台帳の業務上の差分比較は扱いません。

最初に確認:元CSVの番号は残っていますか?

Excelで開いているCSVには、いったん上書き保存しないでください。元ファイルをコピーし、コピーをメモ帳などのテキストエディターで開いて、管理番号の文字を確認します。閲覧だけなら、そのまま保存せず閉じます。

  • 元CSVが 000123、Excelが 123:Excelへの取り込み時の解釈を確認する
  • 元CSVにも既に 123 しかない:未変更の原本、バックアップ、発行元の記録へ戻る
  • 出力CSVは 000123、受領側の画面が 123:受領側の読み込み設定を確認する

元が 0010、010、10 のどれだったかは、数値の 10 だけから判断できません。正しい桁数が不明なまま0を足したり、変わった末尾を推測したりしないことが大切です。

なぜ先頭ゼロや桁が変わるのか

管理番号は、数字だけで書かれていても計算用の数値とは限りません。Excelが数値や日付と解釈すると、番号を構成する文字の一部が失われたり、別の値になったりします。

たとえば今回の架空データでは、CSVをそのまま開いたときに次の変化を確認しました。結果は検証環境の設定によるもので、すべてのExcelで同じ表示になるという意味ではありません。

元CSVの管理番号 直接開いた後の値・状態
000123 数値の 123
1234567890123456 数値の 1234567890123450
1E10 数値の 10000000000
03-04 日付として解釈された値
0010、010、10 いずれも数値の 10

表示形式と、セルに入っている値・型は分ける

数値の 123 をユーザー定義の表示形式で 000123 と見せても、元CSVの6文字を文字列として取り込めた証拠にはなりません。列幅を広げて全桁が見えても、それだけでは元番号との一致は分かりません。

また、取り込み後に表示形式を「文字列」へ変えても、失われた文字や桁は戻りません。今回の直接開きの試験でも、後から表示形式を変更して元番号を回復することはできませんでした。

Microsoftも、16桁以上の番号コードには文字列形式が必要で、既に入力された数値は後から書式を変えるだけでは直らないと説明しています。先頭のゼロおよび大きい数値の保持

安全に取り込むための準備

最初に列の役割を決めます。この記事の例では、確認用の行番号 case_id と管理番号 management_id は文字列、金額 amount は数値にします。全部を文字列にすると、金額の集計が意図どおりにならない場合があります。

本番のCSVへ進む前に、次の12行で取り込み方を確認できます。すべて架空データです。メモ帳に貼り付け、文字コードを「UTF-8(BOM付き)」にして csv-id-sample.csv という新しいファイル名で保存します。「.txt」が末尾に付いていないかも確認してください。これは練習用の入力例であり、受領システムへのアップロード用データではありません。

case_id,management_id,amount
C01,000123,100
C02,123456789012345,200
C03,1234567890123456,300
C04,000000123456789012,400
C05,1E10,500
C06,03-04,600
C07,A001,700
C08,,800
C09,0,900
C10,0010,1000
C11,010,1100
C12,10,1200

C08,,800 の空欄は、0や空白文字で埋めません。金額は100から1200までの12件で、合計は7800です。実際の受領CSVでは、発行元が指定した文字コード・区切り文字・列構成を優先してください。

この記事の実機確認と、次の手動手順の関係

実機確認したのは、WindowsのExcel 16.0/build 20430に、プログラムから従来のテキストQueryTableを作り、列の型を指定する方法です。 2026年10月3日に、UTF-8 BOM付きの12行3列で取り込み、xlsx保存・開き直し、CSV再出力を確認しました。

次に紹介する画面操作はMicrosoftの公式説明に基づく手順です。手動のテキストインポートウィザードとPower Queryの画面操作は、今回の実機試験では確認していません。 QueryTableの結果を、同じボタン操作で実証した結果とは扱いません。まず練習用データで番号・型・金額を確認してください。記事の操作にマクロの実行は必要ありません。

手順1:列の型を指定してCSVを取り込む

Microsoft 365 / Excel 2024では、[ファイル]→[オプション]→[データ]の自動データ変換から、先頭ゼロの削除や16桁以上の数値変換などを無効にできます。本記事ではこの全体設定を変更せず、CSVごとに管理番号列を文字列として取り込む方法を中心に説明します。

ここでは、Windows版Excelの「テキストインポートウィザード」を使います。これは現在も互換性のために用意されている従来の機能です。表示名はExcelの版や言語で異なる場合があります。

  1. Excelで新しい空のブックを開きます。CSVのダブルクリックでは始めません。
  2. 「データ」→「データの取得」→「従来のウィザード」→「テキストから(レガシ)」を選び、元CSVのコピーを指定します。
  3. 手順1/3で「区切り記号付き」を選び、読み込み開始行を1、文字コードを元CSVに合わせます。練習用データはUTF-8です。
  4. 手順2/3で区切り文字を「カンマ」にします。通常のCSVでは文字列を囲む記号は二重引用符です。「連続した区切り文字は1文字として扱う」はオフにし、空欄を含めて3列に分かれているかプレビューで確認します。
  5. 手順3/3でプレビューの case_id 列を選び、列のデータ形式を「文字列」にします。management_id 列も必ず選び直して「文字列」にします。amount 列は、この練習例では「標準」のままにします。
  6. 列見出しの指定を確認して「完了」を押し、空のシートのA1から取り込みます。

「従来のウィザード」が見当たらない場合は、「ファイル」→「オプション」→「データ」の従来のインポートウィザードを表示する欄で「テキストから(レガシ)」を有効にします。必要に応じてブックを開き直し、上の手順へ戻ります。会社の管理で設定できない場合は、管理者の手順に従ってください。Microsoft:テキストインポートウィザード、データのインポート設定

「テキスト/CSVから」でPower Queryが開く場合

こちらは別の取り込み経路です。Microsoftは、プレビューから編集・データ変換へ進み、対象列をテキスト型に指定する方法も案内しています。ただし、Power Queryには自動の型検出があります。「変更された型」などのステップで番号が数値化されていないか、変換前から順に確認する必要があります。Microsoft:Power Queryのデータ型

数値化された後の値を単に文字列へ変えても、元番号の回復は確認できません。Microsoftが示す「現在を置換」を使う場合も、取り込み前のCSVの文字と一致するかを確認してください。本記事の12行の実測結果は、このPower Query経路の動作保証には使えません。

手順2:番号の文字とセルの型を確認する

取り込み直後に、シートのA列が case_id、B列が management_id、C列が amount になっているか確認します。見出しは1行目、データは2〜13行目です。

まず、B2からB13の番号を元CSVと1行ずつ照合します。特に次の点を分けて見てください。

  • B2の 000123 は先頭の0を含めて6文字か
  • B4の16桁の末尾が 6、B5の先頭が6個の0のままか
  • B6の 1E10、B7の 03-04 は元の文字のままか
  • B9は空欄、B10は文字列の 0 か
  • B11〜B13は 0010、010、10 と区別されているか

型を確かめるには、作業用シートの空いているD2に =ISTEXT(B2) を入力し、D13までコピーします。この例では、空欄のB9に対応するD9以外の11個がTRUE、D9がFALSEになるのが期待値です。さらに空いているセルで =ISBLANK(B9) がTRUEかを確認します。

文字列であっても、既に変わった番号を文字列化しただけかもしれません。型の確認と、元番号の文字の一致は両方必要です。 IS関数の判定方法はMicrosoftの公式説明に基づきます。ここで示した確認式の画面入力は、今回の実機試験には含めていません。

金額列は =COUNT(C2:C13) が12、=SUM(C2:C13) が7800かを確認します。COUNTは数値のセル数、SUMは合計を確認するためのものです。COUNT関数、SUM関数

12行の実機試験で確認できたこと

列の型を指定した取り込みでは、空欄以外の管理番号11個が文字列として元番号と一致し、空欄1個もそのまま残りました。金額12個は数値、合計は7800でした。

確認した段階 この12行での結果
QueryTableによる列型指定後 ID11個が文字列、空欄1個、金額12個が数値
xlsxで保存し、Excelで開き直した後 番号・空欄・金額を保持
保存xlsxの内部XMLを別に確認 12行×3列の36セルで値と保存型を確認
CSVへ再出力し、各フィールドを文字として比較 全12レコードが元CSVと一致
その出力CSVをExcelで直接開いた後 元CSVの直接開きと同じ再解釈が発生

比較したのはCSVの各フィールドの値です。引用符などを含むファイル全体のバイト列が、完全に同じだったという意味ではありません。

一方、元CSVを直接開いた試験では、管理番号の文字として7例が変化しても、データ行数12と金額合計7800は変わりませんでした。行数と合計が合うだけでは、番号が保たれたとは判断できません。

列型指定に使った機能の仕様はMicrosoftのQueryTable.TextFileColumnDataTypesで確認できます。試験対象はこの方式です。Mac版・Web版・他ビルド・別文字コード・追加行の更新・実際の受領システムは未検証です。全角文字、前後の空白、数式のような入力も今回の12例には含めていません。

やってはいけない対処:消えたゼロや桁を推測で戻す

  • CSVを直接開き、番号の一致を確かめず元ファイルへ上書きする
  • 取り込み後に「文字列」を選べば、失った番号も戻ると考える
  • 000000 のような表示形式だけで、原本と一致したと判断する
  • 正しい桁数が不明な番号へ、一律に0を足す
  • 管理番号の「数値に変換」を押し、数値としてそろえる

長い管理番号では、指数表記で見えているだけなのか、保存された値の末尾まで変わったのかを分けます。今回の15桁の例は元の数字と一致しましたが、16桁の例は直接開くと末尾が変わりました。桁数の短いIDでも、先頭ゼロや日付風の文字を守るために文字列で扱います。

なお、CSVの値を二重引用符で囲むことは、Excelセルの文字列型を指定することとは別です。CSVの引用符は、カンマや改行を含むフィールドなどを表すための構文です。引用符だけに番号保持を任せず、列型を指定してください。RFC 4180:CSVの形式

手順3:作業用はxlsxで保存して開き直す

番号・型・金額を確認できたら、「名前を付けて保存」でExcelブック(.xlsx)として別名保存します。元CSVには上書きしません。

保存したブックを閉じ、今保存したxlsxを開き直します。ファイル名と保存場所を確かめたうえで、元番号との一致、空欄、型、金額件数、合計をもう一度確認します。今回の実機試験では、この開き直し後も12行の値と型が保持されました。

CSVはテキスト形式で、xlsxのようなセルの型・書式を受領側へ引き継ぐ形式ではありません。Microsoftも、テキスト形式への保存では書式が失われると説明しています。作業ブックと受渡CSVは分けて残すと、どの段階を確認したのか追いやすくなります。Excelでサポートされるファイル形式

手順4:CSVへ再出力し、ファイルの中身を確認する

相手がCSVを必要とする場合だけ、受渡用を作ります。文字コード・区切り文字・列順・見出し・空欄の扱いは、相手の仕様に合わせてください。

  1. 確認用の式を入れたD列などを受渡データへ混ぜないよう、新しい出力用シートにA1:C13だけをコピーし、番号・型・金額を再確認します。元のxlsxは残します。実データではコピー範囲を必要な列・行に合わせます。
  2. 出力するシートを選び、「名前を付けて保存」で、指定されたCSV形式と新しいファイル名を選びます。
  3. CSVでは現在のシートだけが保存されること、Excelの一部機能が保存されないことを確認して保存します。Microsoft:テキスト・CSVのインポートとエクスポート
  4. 保存したCSVをExcelでダブルクリックせず、テキストエディターで開きます。この練習例では、見出しと全12行を元CSVと照合します。

チェックするのは、各行の管理番号・金額・空欄です。C08,,800 のように空欄が残っているか、0010 と 010 が区別されているかも見ます。正しい文字列から書き出した今回のCSVは、全12行の各フィールドが一致しました。

引用符の付き方など、CSVの表記が変わっていても、フィールドの値が同じ場合はあります。逆に、画面で似ていても番号が違う場合があります。大量データや、値の中にカンマ・改行を含むCSVでは、単純な行数や文字列の見比べだけに頼らず、CSVとして解析して全件の値を照合できる社内の確認方法を使ってください。確認できない状態で本番システムへ取り込まないようにします。

手順5:受領側が開いた後の番号も確認する

出力CSVに 000123 と書かれていても、相手がExcelで直接開けば 123 と解釈される可能性があります。今回も、正しく出力されたCSVを直接開き直すと、元CSVを直接開いたときと同じ変化が起きました。このとき、開くだけの確認では対象のCSVファイル自体の内容は変わっていませんでした。

CSVを渡す際は、「管理番号列は文字列として取り込む」ことと、先頭ゼロ・長い番号・空欄の扱いを共有します。受領側の仕様に合う確認用データを使い、実際に読み込んだ後の番号が一致するか確かめます。この記事の架空CSVを、そのまま業務システムへ登録する必要はありません。

Excelで見るだけならxlsxでの受け渡しが可能かも確認できます。ただし、相手のシステムがCSVを指定している場合に、勝手に形式を変えることは避けてください。

最後の検算チェックリスト

  • 変更していない元CSVを残した
  • 管理番号を取り込み時点で文字列に指定した
  • 元番号と各行の文字が一致し、空欄と0を区別できた
  • 金額が数値で、件数・合計も一致した
  • xlsxを保存して開き直し、値と型を確認した
  • 受渡CSVのフィールド値を原本または意図した変更後の値と照合した
  • 受領側の読み込み後も、番号が一致することを確認した

今回の12行なら、管理番号は「文字列11個+空欄1個」、金額は「数値12個・合計7800」が確認の基準です。実データでは件数・合計をそのデータに合わせ、番号の一致を別に確認します。

まとめ

CSVの番号を守るには、取り込み前に列の型を決め、保存と受け渡しの各段階で元の文字と照合することが重要です。表示を整えるだけで済ませず、元CSV、Excelのセル、xlsx、出力CSV、受領側の読み込み結果を分けて見てください。

番号が既に失われている場合は、0の追加や桁の推測で復元せず、変更前のファイルや発行元へ戻ります。番号の取り込みを確認できた後、行を追加しながら台帳を使う場合は、Excelのテーブルと構造化参照で参照範囲の扱いも確認できます。

タイトルとURLをコピーしました