Problem solving guide
CSVを開いたら全部1列になったときの直し方
CSVを開いたら「氏名,部署,金額」のような内容がA列だけに入り、列に分かれないことがあります。多くの場合は、ファイルが壊れたのではなく、実際の区切り文字と開く側の認識が合っていません。
1列になるとき、ファイルの中では何が起きている?
カンマ区切り
社員番号,氏名,部署カンマを列の境目として認識すれば3列になります。
タブ区切り
社員番号→氏名→部署実際には矢印ではなくタブ文字が入っています。これをカンマ区切りのファイルとして読むと、列を分けるカンマが見つからないため、1行全体が1列として扱われてしまいます。
「CSV」という名前でも、実際のデータ連携ではカンマ以外にタブ、セミコロン、パイプが使われることがあります。拡張子だけで区切り文字を決めつけないのがポイントです。
この順番で確認する
- 1
元のCSVを上書きせず残す
まず元ファイルをそのまま残します。Excelなどで開いて保存し直すと、区切り文字以外に文字コード、日付、先頭ゼロなどが変わる場合があるため、確認用にはコピーを使います。
- 2
テキストとして見て、列の境目を確認する
ファイルの先頭数行をテキストとして見ると、値の間にカンマがあるのか、タブで区切られているのかを確認できます。セミコロンやパイプが使われていることもあります。
, カンマ⇥ タブ; セミコロン| パイプ - 3
読み込み時に、その区切り文字を指定してみる
直接ダブルクリックして開くのではなく、表計算ソフトの「テキストまたはCSVから読み込み」のような機能で、実際の区切り文字を指定します。それで正しく列に分かれるなら、元ファイルを変更する必要はありません。
- 4
渡し先が別の区切り文字を要求する場合だけ変換する
たとえば元ファイルがタブ区切りで、取り込み先がカンマ区切りを要求しているなら、区切り文字を変換します。セル内のカンマや改行まで壊さないよう、単純な検索置換ではなくCSVとして解析して変換します。
Which fix?
開き方を変えるだけでよい場合と、変換が必要な場合
ファイルはそのままでよい
読み込み時に区切り文字を選べば列に分かれる
自分が確認するだけなら、ファイルを変換する必要はありません。読み込み方法を変える方が、元データを変えずに済みます。
変換した方がよい
別システムが特定の区切り文字を要求している
取込仕様が「カンマ区切り」「タブ区切り」などを指定している場合は、その仕様に合わせて出力します。
Change delimiter
カンマ・タブ・セミコロン・パイプを変換する
CSV区切り文字変換では、入力の区切り文字を自動判定または指定し、CSVとして解析してから別の区切り文字へ変換します。ダブルクォートで囲まれたセル内のカンマや改行は区別して扱います。
ファイル読み込みはUTF-8が対象です。Shift_JIS / Windows-31JのCSVは、先に文字コードを確認するか、基準CSVがある場合はCSVお手本変換で形式差を確認してください。
カンマをタブへ「すべて置換」は避ける
CSVでは、セルの値そのものにカンマを含めることができます。たとえば "東京都渋谷区, 1-2-3" のカンマは列の区切りではありません。文字列としてすべて置換すると、セルの中身まで変わってしまいます。
区切り文字を変える場合は、引用符を含むCSVの構造を解釈してから再出力する方法を使ってください。
別のCSVと同じ形式にしたい場合
区切り文字以外もまとめて比べられます
基準にしたいCSVがあるなら、区切り文字だけでなく文字コード・BOM・改行・列の並びも違う可能性があります。CSVお手本変換では、2つのCSVの形式を比べ、安全に判断できる項目だけを揃えます。
区切り文字を合わせても列が崩れる場合
一部の行だけ列数が増減する場合は、値の中にあるカンマや改行を囲むダブルクォートが不足している可能性があります。また、文字コードの問題で読み込み自体が崩れている場合もあります。
日本語が文字化けしている場合は CSVが文字化けしたときの直し方、文字コードは合っているのに取込エラーになる場合は CSVの文字コードは合っているのに取り込めないときの確認方法 も確認してください。
よくある疑問
CSVを開いて1列になったら、ファイルが壊れていますか?
必ずしも壊れていません。ファイル内に区切り文字があっても、開くソフトがその区切りを認識しなければ1列に見えることがあります。まず読み込み方法と区切り文字を確認してください。
拡張子が.csvなら、必ずカンマ区切りですか?
必ずしもそうとは限りません。実務ではタブ、セミコロン、パイプなどが使われるファイルもあるため、実際の内容を確認する方が確実です。
カンマをタブへ一括置換してもよいですか?
おすすめしません。セル値に含まれるカンマまで変わる可能性があります。CSVとして解析して、列の境目だけを変換してください。