ExcelでCSVの先頭の0が消える原因と対策|Power Queryで商品コードを正しく取り込む

データファイルを表計算へ取り込み、先頭列を虫眼鏡で確認するイラスト Excel

CSVに入っていた商品コード「00123」が、Excelで開くと「123」になってしまいます。数字は合っているように見えても、商品コードとしては別の値になってしまい、地味に困りました。

この記事では、Power Queryで先頭の0を残したままCSVを取り込む方法を紹介します。すでに0が消えたときの確認ポイントと、取り込み後に更新しても設定を保つ方法までまとめます。

先に結論:CSVは「テキスト」として取り込む

最短の手順

  1. 元のCSVをバックアップする。
  2. Excelの[データ]→[テキストまたはCSVから]で取り込む。
  3. 取り込み画面でデータ型の自動検出をオフにし、[データの変換]を選ぶ。
  4. 商品コード列を[テキスト]、数量列を[整数]にする。
  5. [閉じて読み込む]でExcelに戻し、商品コードの0を確認する。

対象はWindows版ExcelのPower Queryです。画面名や選択肢はバージョンにより異なります。自動検出の設定が見当たらない場合や、すでに取り込んでいる場合は、後述の「変更された型」の見直しを行ってください。

なぜ先頭の0が消えるのか

CSVには、Excelブックのようなセルの表示形式は保存されません。読み込む側が「これは数値だ」と判断すると、00123は数値の123になります。数量なら困らなくても、商品コードなどの識別用の値では問題になります。

注意したいのは、Excelで直接開くときの変換と、Power Query内の型変換は別だという点です。Power Queryから取り込んでも、自動的に作られた型変換の処理で、商品コードが数値になることがあります。

データの用途値の例この記事で使う型
商品を識別するコード00123、00007テキスト
商品の名前ノート、ペンテキスト
計算に使う数量2、3整数

見た目が数字でも、足し算する値なのか、識別するための値なのかで扱いを分けると整理しやすくなります。

お試し用CSVを用意する

以下はこの記事用に用意した架空のデータです。コピーしてメモ帳へ貼り付け、ファイル名をproducts.csv、文字コードをUTF-8で保存してください。
※ 保存時のファイルの種類は[すべてのファイル]にし、拡張子が「xxx.csv.txt」にならないようにします。

商品コード,商品名,数量
00123,ノート,2
00007,ペン,3
01020,ファイル,4
123,付せん,1

この例では、あえて「00123」と「123」を別の商品にしています。数値に変換すると両方とも123になり、後から商品一覧と照合する際に区別できなくなるためです。すべてのコードを同じ桁数にそろえれば解決する、とは限りません。

元のCSVは、Excelで開いて上書き保存しないでください。中身の確認や編集にはメモ帳を使います。元データに0が残っていることが、正しく取り込み直すための前提です。

Power Queryで先頭の0を残して取り込む

1.ExcelからCSVを選ぶ

空のExcelブックを開き、[データ]→[テキストまたはCSVから]を選択します。見当たらない場合は、[データの取得]→[ファイルから]→[テキストまたはCSVから]を探し、先ほど保存したproducts.csvを指定してください。

取り込み画面で、文字コードがUTF-8、区切り記号がコンマになっていることを確認します。日本語が崩れている場合は、先頭の0とは別に文字コードの確認が必要です。

2.データ型の自動検出をオフにする

取り込み画面に[データ型検出]の選択肢がある場合は、[データ型を検出しない]を選びます。そのうえで[読み込み]ではなく[データの変換]を選択します。

自動検出をオフにすると、各列をテキストとして読み込めます。この仕組みはMicrosoftのText/CSVコネクタの説明でも確認できます。

3.商品コードと数量の型を分ける

Power Queryエディターで、商品コードが「00123」「00007」「01020」「123」と表示されていることを確認します。1行目がデータ扱いになっている場合は、[1行目をヘッダーとして使用]で列名にします。

商品コード列を選択し、列名の左にあるデータ型のアイコン、または[変換]タブの[データ型]から[テキスト]を選びます。商品名もテキスト、数量は[整数]にします。すでに正しい型なら変更は不要です。

この時点で123や7になっている場合は、そのまま進めず、次の節で型変換の順番を見直してください。最後のステップでテキストにしても、消えた0は戻りません。

4.読み込み結果を確認し、ブックを保存する

[ホーム]→[閉じて読み込む]でExcelのシートへ読み込みます。このサンプルの期待結果はデータ4行・数量合計10です。商品コードの0だけでなく、行数と数量も確認すると、途中で行を落としていないかを確認できます。

作業したブックは.xlsx形式で保存してください。CSVとして保存し直すのではなく、Power Queryの取り込み設定をExcelブック側に残します。以後も元のCSVは必要なので、保存場所を変えたり削除したりしないようにします。

すでに0が消えたときは「変更された型」を確認する

[データ]→[クエリと接続]から対象のクエリを編集し、右側の[適用したステップ]を確認します。自動で追加された[変更された型]など、データ型を変えるステップが手がかりです。

  1. 型変換の直前のステップを選び、商品コードに0が残っているか確認する。
  2. 次のステップで0が消えるなら、その型変換を見直す。
  3. この練習用の単純なクエリなら、問題の[変更された型]を削除し、商品コードをテキスト、数量を整数として設定し直す。
  4. 後続のステップで、再び商品コードが数値に変換されていないか確認する。

業務用のクエリでは、ステップを削除すると後続の計算などに影響することがあります。先にブックのコピーを保存し、どの列を変換している処理なのか確認してから修正してください。

もし元のCSV自体がすでに123になっている場合、Power Queryだけでは元が123・0123・00123のどれだったのか分かりません。バックアップや出力元のシステムから、元データを取り直すのが基本です。

更新しても0が残るか確認する

一度取り込めたら終わりではなく、元データが増えた場合も確認します。練習用のproducts.csvをメモ帳で開き、末尾の次の行に以下を追加して、同じ文字コードで保存してください。

00042,クリップ,5

Excelに戻り、[データ]→[すべて更新]を実行します。データが5行・数量合計15になり、追加したコードが00042のままであれば、このサンプルの確認は完了です。Power Queryは更新時にも保存した変換手順を適用します。

よくある勘違いと注意点

表示形式「00000」と、文字列の「00123」は別

セルの表示形式を00000にすると、数値の123を00123と表示できます。ただし、セルの中身は数値の123のままです。元から5桁と決まっている番号を表示する用途には使えますが、今回のように123と00123を区別したい商品コードの取り込み対策にはなりません。

CSVで引用符を付けるだけでは安心できない

CSVに「”00123″」と書かれていても、読み込む側が数値に変換する場合があります。引用符はCSVの区切りなどを扱うためのもので、ExcelやPower Queryに文字列型を強制する指定ではありません。取り込み側の型も確認します。

長い番号も、数値に変える前にテキストへ

16桁以上の管理番号などは、Excelで数値として扱うと桁の精度が失われることもあります。後から表示形式を変えても、失われた桁は復元できません。計算しない識別番号は、先頭の0の有無にかかわらずテキストで取り込む方が適しています。

なお、Excelの一部のバージョンには、自動データ変換を変更する設定もあります。ただし、Power Queryの[適用したステップ]とは別の設定です。今回の方法では、クエリ側で列の型を明示して管理します。

まとめ

  • 商品コードは、数字に見えてもテキストとして扱う。
  • CSVの取り込み時に自動の型変換を確認する。
  • すでに消えた場合は、元のCSVと、0が消える直前のステップを確認する。
  • 取り込み直後だけでなく、更新後もコード・行数・数量を確認する。

ポイントは、0を後から足して見た目を整えるのではなく、元のコードを変えずに取り込むことです。商品一覧との照合や集計を始める前に、まずこの部分を確認しておきましょう。

関連記事・参考情報

コメント

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