CSVのセル内改行で取り込みが崩れる理由と、改行を残す・消す方法
商品説明や住所の欄に改行が入ったCSVでは、1件のデータが途中で次の行に分かれ、列がずれることがあります。CSVの形式で改行がどう扱われるかと、セル内の改行を残したままExcelファイルにする方法、改行をスペースに置き換える方法を、公式の説明に沿ってまとめました。
ネットショップの管理画面から書き出した商品CSVを開いたら、途中から行がずれていたとします。商品説明の欄に改行が入っていると、説明の後半が次の行の先頭に回り、価格や在庫の列に説明文の続きが入って見えることがあります。住所や備考の欄に改行がある顧客リストでも、同じことが起きます。
このまま別のシステムに取り込むと、エラーで止まったり、1件の商品が2件に分かれて登録されたりするおそれがあります。改行を残したいのか、消してしまいたいのかによっても、取るべき方法は変わります。
改行を含んだままの商品説明を1つのセルに収めて開きたいなら、当サイトのCSVをExcelに変換でExcelファイル(.xlsx)にするのがおすすめです。引用符で囲まれた改行はセルの中の改行として読み、必要なときだけスペースに置き換えて保存できます。CSVはサーバーにアップロードされず、お使いのブラウザの中だけで処理されます。
改行を含むCSVをExcelファイルにする手順
- CSVをExcelに変換を開き、CSVファイルを枠にドラッグ&ドロップする(スマホでは「ファイルを選択」を押して選ぶ)
- 確認画面で、行数と列数、先頭の行の内容を見る
- 改行を消したいときは、「(必要なときだけ)セル内の改行をスペースに置き換える」にチェックを入れる
- 「Excelファイルを保存」を押す
確認画面には、全体の行数と列数と、先頭の20行が表示されます。行数が思ったより多いときや、列がずれて見えるときは、ファイルの側で改行の扱いが崩れている可能性があります。チェックを入れると、確認画面の表示も置き換えた後の内容に変わるので、保存する前に結果を見られます。
チェックを入れない場合、改行はセルの中に残ったまま保存されます。Excelで開いたときに改行の位置で折り返して表示されないときは、Excelの「折り返して全体を表示」を使ってください(下の「ほかの方法」で説明します)。
このツールは、すべてのセルを文字として保存します。先頭の0や日付のように見える値も、元のまま残ります。文字コードはUTF-8とShift_JISを自動で判定でき、扱えるのは50MBまでで20万行までのCSVとTSVです。
ファイルはサーバーに送られません
- 変換は、お使いのブラウザの中だけで行います。CSVをインターネット上のサーバーへアップロードすることはありません。
- 会員登録やメールアドレスの入力はありません。
- 変換したExcelファイルは、お使いの端末に直接ダウンロードされます。
CSVでは改行が「1件の区切り」を表している
CSVの形式をまとめたRFC 4180では、1件のデータ(レコード)を1行に書き、行と行を改行で区切ると説明しています。つまり、CSVの改行は本来「ここで1件が終わる」という意味を持っています。
そのうえでRFC 4180は、改行やダブルクォーテーション(")、カンマを含む値は、ダブルクォーテーションで囲むべきだとしています。値の中のダブルクォーテーションは、2つ重ねて書きます。たとえば次のCSVでは、2列目の値が改行を含む1つの値として扱われます。
商品番号,商品説明,価格
A001,"綿100%のシャツです。
洗濯機で洗えます。",3000
読み込む側がこの決まりに沿っていれば、引用符の中の改行は値の一部として読まれます。値が引用符で囲まれていないCSVや、引用符を考えずに改行だけで行を分けるソフトでは、1件のデータが途中で2行に分かれます。後半の行は列の数が足りないので、列がずれて見えます。RFC 4180は、各行は同じ数の値を持つべきだとしています。
RFC 4180自体は、CSVの形式には正式な仕様が無く、さまざまな解釈があると前置きしています。多くの実装で使われている形式をまとめた文書なので、すべてのソフトがこのとおりに読むとは限りません。
なお、当サイトのツールもRFC 4180の決まりに沿って読みます。引用符で囲まれていない改行は、行の区切りとして扱います。書き出した元のファイルで値が引用符に囲まれていない場合は、このツールでも行が分かれるので、書き出す側の設定を見直してください。
ほかの方法
Excelでセル内の改行を表示する、入力する
Microsoftの説明では、セルの中で改行を入れるには、セルをダブルクリックして改行したい位置をクリックし、Alt+Enterキーを押します。セルを選んでF2キーを押しても、編集を始められます。
改行の入ったセルが1行のまま表示されるときは、セルを選んで「ホーム」タブの「配置」グループにある「折り返して全体を表示」を選んでください。折り返した文字列の全体が見えない場合は、「ホーム」タブの「セル」グループで「書式」を選び、「行の高さの自動調整」を選ぶと行の高さが合います。
関数でセル内の改行をスペースに置き換える、消す
MicrosoftのTEXT関数の説明では、Alt+Enterキーと同じ改行を数式で入れるには、CHAR(10)を使うと案内しています。SUBSTITUTE関数は、文字列の中の特定の文字を別の文字に置き換える関数です。この2つを組み合わせると、セルA2の改行をスペースに置き換える数式は次のようになります。
=SUBSTITUTE(A2,CHAR(10)," ")
改行を何も入れずに消したいときは、CLEAN関数も使えます。Microsoftの説明では、CLEAN関数は印刷できない文字(文字コードの0から31)を文字列から削除し、使用例ではCHAR(9)のタブとCHAR(10)の改行が消えています。改行の前後の言葉がそのままつながるので、区切りが必要な場合はSUBSTITUTE関数でスペースに置き換えてください。どちらの方法も、結果は別の列に出るので、元の列と入れ替えるときは値として貼り付けてください。
「テキストまたは CSV から」で読み込み、改行の扱いを選ぶ
Excelの「データ」タブにある「テキストまたは CSV から」を使うと、Power Queryで読み込めます。Power Queryの説明では、ソースの手順を編集する画面に「改行」の選択肢があり、引用符の中の改行をどう扱うかを選べます。「引用符で囲まれた改行を無視」を選ぶと、改行の後半は同じ列の中に読み込まれます。「すべての改行を適用する」を選ぶと、改行の位置で新しい行に分かれます。
テキストインポートウィザードでは、値を囲む文字を「テキスト区切り記号」として指定できます。Microsoftの説明では、区切り記号がカンマでテキスト区切り記号が引用符(")のとき、"Dallas, Texas" は1つのセルに読み込まれます。ただし、ウィザードで引用符の中の改行がどう読まれるかは、公式の説明では確かめられませんでした。
取り込みエラーの原因が改行ではなく商品説明のHTMLタグなら、商品CSVのHTMLタグの閉じ忘れを直す方法を参考にしてください。Excelで開くと先頭の0や日付が変わる場合は、CSVをExcelで開くと先頭の0が消える理由とCSVの日付や数字がExcelで勝手に変わる理由で説明しています。