CSVガイド

CSVの列ずれ・列数不一致の原因と対処方法

最終更新:

要点

CSVの列ずれは、区切り文字(カンマなど)と引用符(ダブルクォート)のルールが崩れたときに起こります。 値の中にカンマや改行が入る項目は、ダブルクォートで囲む必要があります。引用符が閉じていない行や、行ごとに列数がそろっていない行を見つけて、元のデータを直すのが確実です。

列ずれが起こる主な原因

  1. 値の中のカンマ。住所や備考に「,」が入ると、そこで項目が分かれます。
  2. 閉じていない引用符。ダブルクォートが閉じていないと、次の行までひとつの項目として読まれます。
  3. セル内改行。引用符で囲まれた改行は正しいCSVですが、1行ずつ読むツールでは行が分かれてしまいます。
  4. 区切り文字の違い。拡張子が.csvでも、中身がタブ区切りやセミコロン区切りのことがあります。
  5. 手作業の追記・削除。一部の行だけ項目を足したり消したりすると、列数がそろわなくなります。

例1:値の中のカンマ

ヘッダーは4列ですが、2行目は住所の中のカンマで5列に分かれてしまいます。「数量」の位置に「 2F」が入る、典型的な列ずれです。

注文番号,お届け先名,住所,数量
A-0001,架空 太郎,架空県サンプル市1-1, 2F,1

値をダブルクォートで囲めば、カンマは区切りではなく値の一部になります。

注文番号,お届け先名,住所,数量
A-0001,架空 太郎,"架空県サンプル市1-1, 2F",1

例2:引用符の閉じ忘れと、値の中のダブルクォート

次の2行目は引用符が閉じていないため、3行目以降もひとつの項目として読まれ、どこで行が終わるのか判断できなくなります。

注文番号,お届け先名,住所,数量
A-0002,"架空 花子,架空県デモ町2-2,2
A-0003,見本 さくら,架空県見本村3-3,1

値の中にダブルクォートそのものを入れるときは、2つ重ねて書きます("")。

注文番号,商品名,数量
A-0004,"テスト ""特大"" サイズ",1

例3:セル内改行

引用符で囲まれていれば、改行を含んでいてもCSVとしては正しい1行(1件)です。表計算ソフトやCSVの規則に沿ったツールは1件として読みます。

注文番号,お届け先名,住所,数量
A-0005,試験 次郎,"架空県サンプル市5-5
サンプルビル3F",1

ただし、取り込み先によってはセル内改行を受け付けないことがあります。取り込み先の仕様を確認してください。

確認と対処のしかた

  1. 区切り文字を確かめる。テキストエディタで開き、項目の間がカンマか、タブか、セミコロンかを見ます。
  2. 列数がそろっていない行を探す。ヘッダーの列数と、各行の(引用符の外にある)区切り文字の数を比べます。
  3. 元のデータを直して書き出し直す。カンマや改行を含む項目が引用符で囲まれる設定で書き出すか、元データの値を修正します。列ずれした結果を手作業で詰め直すと、別の項目を壊しやすくなります。

Kakerio(CSV Doctor)での判定

  • 区切り文字(カンマ・タブ・セミコロン・パイプ)を自動で判定し、引用符で囲まれたカンマやセル内改行は値の一部として扱います。
  • ヘッダーと列数が違う行は「列数の不一致」として行ごとに報告します(例:「ヘッダーは4列ですが、この行は5列です」)。どの項目がずれたのかは推測できないため、列を詰めたり足したりはしません。修正版では、その行をそのまま残し、安全に直せる項目だけを反映します。
  • 引用符が閉じていない場合や、引用符の位置が不正な場合は、行や項目の境界を信頼できないため、修正版の出力を止めます。診断レポートを確認して、元のCSVを直してください。
  • 改行コード(CRLF / LF / CR)が混在している場合は、修正版でCRLFにそろえます。
  • 修正版を作ったあと、その出力をもう一度読み直して検証し、構造が崩れるなど問題がある場合はダウンロードを止めます。