注文書係

受注データのCSVで列がずれる — 商品名にカンマや改行が入っているときのクォーティングの基礎

公開:

FAX注文書から起こした受注データをCSVにして基幹システムへ取り込んだら、ヘッダーの列数と実際の列数が合わない、1商品のはずなのに2行に分かれてしまう——という症状に遭遇したことはないでしょうか。文字コードや日付形式を疑って確認しても原因が見当たらない場合、疑うべきは商品名や住所の値そのものに含まれるカンマや改行です。

この記事では、CSVの値にカンマ・改行・ダブルクォートが含まれるときに列がずれる理由と、Excelで壊さずに保存するための基礎を整理します。

なぜ「商品名にカンマ」で列がずれるのか

CSVはカンマ(,)を区切り文字として列を分けるファイル形式です。そのため、商品名や住所そのものにカンマが含まれていると、区切り文字と誤認識されてその1つの値が2列に割れてしまいます。

具体例:

  • 商品名「オイル(1,000ml)」のカンマが区切りと誤認識され、オイル(1000ml) の2列に分かれる
  • 取引先の住所「東京都◯◯区△△1-2-3、◯◯ビル3F」のカンマで列がずれる

このとき何が起きるかというと、その1行だけ列数が増え、以降の列(数量・単価など)がすべて1列ずつ右にずれます。ヘッダー行の列数と実際の行の列数が合わなくなり、基幹システム側で「列数が一致しません」といったエラーになったり、エラーにならないまま数量の列に単価が入ってしまったりします。

セル内改行でも同じことが起きる

住所欄や備考欄を手入力・AI-OCRで起こす際、セル内で改行(Excelなら Alt+Enter)を含めてしまうことがあります。CSVの仕様上、通常は1行が1レコードとして扱われるため、値の中に改行が含まれていると、その時点で行が終わったと誤認識され、1つの商品データが2行に分かれて取り込まれてしまいます。

対処: ダブルクォートで囲む

CSVの正式な仕様(RFC4180で定義されているクォーティングルール)では、値にカンマ・改行・ダブルクォートそのものが含まれる場合、その値全体をダブルクォート(")で囲むことで1つの項目として扱えると定められています。

  • 通常の値: オイル,1000,500
  • カンマを含む値をクォートした場合: "オイル(1,000ml)",10,500

こうしておけば、"..." で囲まれた範囲内のカンマは区切り文字として扱われず、オイル(1,000ml) がひとかたまりの値として認識されます。改行を含む場合も同様に、ダブルクォートで囲めば1つの項目内の改行として扱われ、行が分かれることはありません。

値そのものにダブルクォートが含まれる場合(「」の代わりに"を使っている等)は、その"を""と2つ重ねてエスケープした上で、値全体をさらにダブルクォートで囲む、という二重の扱いになります。頻度は高くありませんが、覚えておくと原因不明のずれに気づきやすくなります。

症状から原因を切り分ける

症状疑う原因
特定の行だけ列数が多く、数量・単価などの列がずれて取り込まれる商品名・住所などの値にカンマが含まれ、クォートされずに区切り文字と誤認識されている
1商品のはずのデータが2行に分かれて取り込まれる値の中にセル内改行が含まれ、クォートされずに行区切りと誤認識されている
ヘッダーの列数と実際の行の列数が一致しないというエラーが出る上記いずれかによる列のずれ
Excelで開くと正常に見えるのに取込だけ失敗するExcel上は1セルとして表示されていても、保存されたCSVファイル側でクォートが崩れている可能性

Excelで保存するときの注意

Excelで作業している場合、セル内にカンマや改行を入力してCSV形式(カンマ区切り)で保存すれば、Excelが自動的にその値をダブルクォートで囲んで保存してくれます。列がずれる事故の多くは、Excel上での保存そのものよりも、次のような場面で起きがちです。

  • CSVをテキストエディタで開いて手直しした際に、ダブルクォートの対応関係を崩してしまう
  • 別のシステムから出力されたCSV(クォートなし、または独自ルール)をそのまま流用・加工する
  • 複数のCSVファイルをコピー&ペーストで結合する際、一部の行だけクォートが抜け落ちる

列がずれる不具合に遭遇したら、まずテキストエディタでその行を開き、カンマや改行を含む値がダブルクォートで囲まれているかを目視で確認するのが最短の切り分け方法です。

日付・単位・全角半角・0落ちといった表記そのものの正規化については「表記ゆれ」— 日付(和暦/西暦)・単位(ケース/箱)・全角半角・0落ちの正規化、文字コードの不一致による文字化けの基本は基幹システムへのCSV取込でよくあるエラーと対処法で扱っています。

まとめ

  1. CSVはカンマを区切り文字として使うため、商品名や住所そのものにカンマや改行が含まれていると列や行がずれる
  2. 対処はRFC4180で定義されたクォーティングルールに従い、該当する値全体をダブルクォートで囲むこと
  3. Excelで保存する場合は通常自動的にクォートされるが、テキストエディタでの手直しや他システム由来のCSVの流用で崩れやすい
  4. 列がずれる・行が分かれるといった症状が出たら、まずテキストエディタでカンマ・改行を含む値がダブルクォートで囲まれているかを確認する

手前味噌の紹介

この記事を書いているのは、注文書特化サービス注文書係(ちゅうもんしょがかり)の運営者です。FAX・手書きの注文書をアップロードするとAIが下書きを作り、担当者は自信のない項目だけを確認して確定します。転記にかかる時間を1/10程度に圧縮することを狙ったサービスです。

商品名や住所にカンマ・改行が含まれる場合も、CSV出力時に適切なクォーティングを崩さずに書き出す仕組みのため、列がずれる心配をせずに基幹システムへ取り込めます。

無料トライアル(30枚または14日間、クレジットカード登録不要)で、実際にお使いの帳票との相性を確かめてみてください。

よくある質問

Q. 受注データのCSVで、特定の行だけ列数がずれるのはなぜですか?
CSVはカンマを区切り文字として列を分けるファイル形式のため、商品名や住所そのものにカンマが含まれていると区切り文字と誤認識され、1つの値が2列に割れてしまいます。その結果、その行だけ列数が増え、数量・単価などの以降の列が1列ずつずれて取り込まれます。
Q. 1商品のはずのデータが2行に分かれて取り込まれるのはなぜですか?
住所欄や備考欄にセル内改行が含まれていると、CSVの仕様上そこで1行(1レコード)が終わったと誤認識され、1つの商品データが2行に分かれて取り込まれてしまいます。カンマによる列ずれと同じく、値がダブルクォートで囲まれていないことが原因です。
Q. カンマや改行を含む値はどう対処すればいいですか?
CSVの正式な仕様(RFC4180のクォーティングルール)では、値にカンマ・改行・ダブルクォートが含まれる場合、その値全体をダブルクォートで囲むことで1つの項目として扱えると定められています。Excelでカンマ区切り形式で保存する場合は通常自動的にクォートされますが、テキストエディタでの手直しや他システム由来のCSVの流用でクォートが崩れやすいので注意が必要です。
Q. 列がずれる不具合が起きたとき、最短で原因を切り分ける方法はありますか?
テキストエディタでその行を開き、カンマや改行を含む値がダブルクォートで囲まれているかを目視で確認するのが最短です。Excel上は正常に見えても、保存されたCSVファイル側でクォートの対応関係が崩れているケースがあります。

← コラム一覧へ戻る