商品コードは合っているのに「マスタに存在しません」— コードの前後に紛れ込む見えない空白という盲点
公開:
受注データをCSVで基幹システムに取り込んだら、「商品コードがマスタに存在しません」「得意先コードが見つかりません」というエラーで止まった。画面で見比べても、コードは品目マスタのものと一字一句同じに見える——こうしたことが起きることがあります。
見た目は同じなのに一致しないとき、まず疑いたいのが**コードの前後に紛れ込んだ空白(スペース)**です。「ABC123」と「ABC123 」は、人の目には同じに見えても、コンピューターにとっては別のコードです。この記事では、Excelの関数の使い方を並べるのではなく、「見た目が同じなのに一致しない」ときに空白を疑い、確かめ、直すまでの判断の順番を、受注事務の手元で完結する形で整理します。
「見た目は同じなのに一致しない」なら、まず空白を疑う
マスタ照合のエラーが出たとき、原因の候補はいくつかあります。
| 疑う順番 | 原因 | 見た目で気づけるか |
|---|---|---|
| 1 | コードの前後に空白が入っている | 気づけない(画面上は同じに見える) |
| 2 | 先頭の0が消えている(0落ち) | 桁数を数えれば気づける |
| 3 | 全角と半角が混ざっている(「ABC」と「ABC」など) | 注意して見れば気づける |
| 4 | そもそもマスタに未登録の新しいコード | マスタを検索すれば気づける |
2〜4は、注意深く見比べたりマスタを検索したりすれば、画面上で見つけられます。空白だけは、行末や行頭にあると画面ではまったく見分けがつきません。「何度見比べても同じなのに通らない」という状況は、それ自体が空白を疑うサインです。
0落ちについてはJANコードの指数表記・0落ちの記事、全角・半角の混在については受注データの表記ゆれの記事で整理しています。
空白が紛れ込む主な経路
空白は、誰かが意図して入れたものではないことがほとんどです。どこから入り込むかを知っておくと、再発を防ぎやすくなります。
経路1: 別のシステムやWebページからのコピー&ペースト
取引先のWeb発注画面や、別のシステムの画面からコードをコピーして貼り付けると、コードの前後の空白まで一緒にコピーされることがあります。Webページからのコピーでは、普通の半角スペースとは別の「ノーブレークスペース」という見えない文字が混ざることもあります。
経路2: 手入力や変換のときの全角スペース
日本語入力をオンにしたままコードを打ち、確定のついでにスペースキーを押してしまうと、コードの後ろに全角スペースが付くことがあります。全角スペースは半角スペースより幅が広いものの、行末にあると画面上ではやはり見えません。
経路3: Excelの表示形式のままCSVに保存したとき
在庫管理サービスの公式ヘルプでは、Excelで桁数の多いバーコードや品番の列を「数値」の表示形式にしたままCSVに保存すると、値の末尾に半角スペースが入り、別のコードとして認識されてしまうことがある、と案内されています。対処として、その列の表示形式をユーザー定義の「0」にしてから保存する方法が紹介されています。
Excelの上では空白は見えず、CSVにしたときに初めて付くため、Excelの画面をいくら見比べても気づけない経路です。
経路4: 他のシステムから出力したデータを使い回すとき
システムによっては、項目の桁数をそろえるために、短いコードの後ろを空白で埋めて出力するものがあります。そうしたデータを加工して受注データに使い回すと、空白が付いたままのコードが基幹システムに渡ることがあります。
空白が入っているかを確かめる
画面で見えない以上、目で探すのではなく、桁数で確かめるのが確実です。
LEN関数で桁数を比べる
空いている列に =LEN(B2) と入れると、セルに入っている文字の数が出ます。「ABC123」なら6のはずが7や8になっていれば、見えない文字が何か入っています。品目マスタ側のコードにも同じようにLEN関数をかけて、桁数が食い違う行を探します。
照合したい2つのセルを直接比べる場合は、=B2=マスタ!A2 のように入れると、一致すればTRUE、一致しなければFALSEが出ます。見た目が同じなのにFALSEなら、空白などの見えない違いがあります。
テキストエディタでCSVの中身を見る
保存したCSVファイルをメモ帳などのテキストエディタで開くと、Excelを通さずにファイルの中身そのものを見られます。コードがダブルクォーテーションで囲まれている場合は、"ABC123 " のように、閉じのクォートの前に空白があるかで見分けられます。囲まれていない場合は、コードとカンマの間に空白がないかを見ます。
経路3のように、Excel上では空白がなくCSVにしたときだけ付くケースは、この方法でしか確かめられません。
直し方
置換で空白を消す(列を限定して)
コードの列だけを選んだ状態で「検索と置換」(Ctrl+H)を開き、検索する文字列に半角スペースを1つ入れ、置換後は空欄のまま「すべて置換」します。全角スペースが疑われる場合は、全角スペースでも同じ操作をします。
このとき、必ずコードの列だけを選んでから置換してください。シート全体で置換すると、「黒 ボールペン」のように、品名や得意先名の中に本来必要な空白まで消えてしまいます。コードの中に空白が入らないことが分かっている列だけが対象です。
TRIM関数を使う場合の注意
ExcelのTRIM関数は、文字列の前後の空白を取り除く関数です。ただし、Microsoftの公式ドキュメントでは、TRIM関数はもともと半角スペースを取り除くための関数で、Webページなどで使われるノーブレークスペースは、TRIM関数だけでは取り除かれないと説明されています。その場合は、SUBSTITUTE関数でノーブレークスペースを普通の空白に置き換えてからTRIM関数をかける方法が案内されています(例: =TRIM(SUBSTITUTE(B2,CHAR(160)," ")))。
TRIM関数をかけたあとは、もう一度LEN関数で桁数を確かめ、マスタ側と同じ桁数になったかを見ておくと確実です。関数で作った列は数式のままなので、値として貼り付けてから元の列と入れ替えます。
Excelの表示形式が原因なら、表示形式を変えてから保存する
経路3が疑われる場合は、値を直すのではなく、CSVに保存する前にコードの列の表示形式を変えます。前述のヘルプで案内されているユーザー定義の「0」のほか、コードの列は最初から「文字列」の表示形式にしておくと、0落ちも含めて防ぎやすくなります。保存後は、テキストエディタで開いて空白が付いていないかを確かめます。
予防策: 送る前に確かめる
- コードは貼り付けたら桁数を見る: Web画面や他システムからコードを貼り付けたときは、LEN関数で桁数がマスタと合っているかを確かめる習慣にしておきます
- コードの列は「文字列」の表示形式にしておく: 取込用のシートを作るときに、コードの列だけ先に表示形式を決めておきます
- CSVを送る前にテキストエディタで開く: エラーが出た行だけでなく、送る前に一度ファイルの中身を見ておくと、Excelでは見えない空白に気づけます
ほかのCSV取込エラーの対処は、基幹システムへのCSV取込でよくあるエラーと対処法でまとめています。
まとめ
- 「コードは同じに見えるのにマスタに存在しない」と言われたら、まずコードの前後の空白を疑う
- 空白は、コピー&ペースト・全角スペースの打ち込み・Excelの表示形式のままのCSV保存・他システムのデータの使い回し、といった経路で入り込む
- 見えない以上、LEN関数で桁数を比べるか、テキストエディタでCSVの中身を見て確かめる
- 置換で消すときはコードの列だけを選ぶ。TRIM関数はノーブレークスペースを取り除かないので、必要ならSUBSTITUTE関数と組み合わせる
- 表示形式が原因なら、値ではなく表示形式を変えてから保存し、テキストエディタで確認する
手前味噌の紹介
この記事を書いているのは、注文書特化サービス注文書係(ちゅうもんしょがかり)の運営者です。FAX・手書きの注文書をアップロードするとAIが下書きを作り、担当者は自信のない項目だけを確認して確定します。転記にかかる時間を1/10程度に圧縮することを狙ったサービスです。
注文書係は、注文書から取引先名・受注日・注文番号と、明細の品番・品名・数量・単位・単価を読み取り、取込先に合わせた列順でCSVに出力します。読み取った品番は確定前の確認画面で担当者が目で確かめて直せる形になっていますが、取込先のマスタとの照合は基幹システム側で行われるため、この記事の確かめ方は取込前の確認にもそのまま使えます。
無料トライアル(30枚または14日間、クレジットカード登録不要)で、実際にお使いの帳票との相性を確かめてみてください。