Excelで開くと文字化けするCSVの開き方と対処方法
楽天市場の商品情報CSVなどCSVファイルをExcelで開くと、
- セルの中身が#NAMEになる
- 電話番号など数列先頭の0が消える
- JANコードなど桁数の多い数列の表示が文字化けする
などの症状が出た経験、ありますよね。
今回はなぜそのようなことが起こるのか、そして文字化けさせずにCSVをExcelで開く方法を解説します。
CSVファイルををExcelでそのまま開くと余計な処理をするのが原因
このように、実際のセル中身とは別に#NAMEと表示されたり数列の先頭のゼロが消える文字化けが起こります。
実はこれ全部Excelによる悪さ。メモ帳で開くExcelで開いた際に元の状態からかなり変更されて表示されていることがわかります。
こうしてみると、CSV列の「 -csv 」の頭には勝手にイコールがついて「 =-csv 」にされていたり、電話番号列の09012345678の最初の0が消されているのがわかります。
(ちなみに2列目の数列はセルの横幅が狭いために表示ができていないだけで、セル横幅を調整してやるときちんと表示されるので、実は問題ありません)
CSVファイルをメモ帳などでみると、実際にはデータ上ではそのようなことにはなっていません。Excelはデータを読み込んで表示する際、セルの書式設定に合わせて処理をかけています。
例えば数列の頭の0が消える現象は「 ゼロから始まる数値はありえない 」とのExcelの信念(仕様)のもと最初のゼロを消してしまうのです。
CSVをいじる際にはなんとも迷惑な話ですが、Excelは職務(仕様)に忠実に働いているだけのことです。
解決方法 CSVファイルをデータ読み込みから文字列指定で読み込む
Excel上でセルの書式設定が「 文字列 」のセルなら数字でも数式でもないそういう文字列として扱い、セルの先頭が -(半角ハイフン / マイナス)だろうが0の数列だろうが、特になにも処理をせずに表示してくれます。
しかし、普通にExcelでCSVファイルを開くと読み込んだ時点でデフォルトの標準書式設定で開いてしまいます。データとしては既に書き変わったあとのため、開いてから書式設定を文字列に設定しても元には戻りません。
冒頭の例でいえば、既に中身が書き替えられているため文字列にしても「 =-csv 」「 9012345678 」などの文字列になるだけで「 -csv 」や「 09012345678 」に戻るわけではないのです。
なので、余計な処理をかけないようCSVファイルを開くと同時に書式設定を変更できるデータ読み込み機能を使います。
Excelのデータ読み込みによるCSVファイルの文字列変換
まず、Excelで何もファイルを開いていない空白の新規ブック&シートを用意します。
そこから
- データタブ
- 外部データの読み込み
- テキストファイル
の順でクリック。
これでテキストファイルウィザード画面が開きます。
楽天やYahoo!ショッピングなどの商品用CSVや顧客情報CSVなどの場合、最初から選択されている「 カンマやタブなどの区切り文字によってフィールドごとに区切られたデータ 」のまま次へをクリックします。
するとテキストファイルウィザードの2/3へ移動します。これはCSVファイルのセル列の区切り文字を設定する画面。
楽天RMSやYahoo!ショッピングからダウンロードしたCSVファイルの場合はカンマで区切られているのでカンマにチェックをつけます。
すると下のプレビュー画面で各セルの間に壁ができ、区切り文字が設定されたのが確認できます。
このようにカンマなど特定の文字を区切りとして設定することで、セルを分けることができます。
ついでに最初についているタブのチェックははずしてしまいましょう。楽天RMSやYahoo!ショッピングでタブキーを使うことはまずないのでそのままでも特に支障はないと思いますが、念のため。
ちなみにAMAZONの場合はカンマ区切りのCSV(カンマセパレートバリュース)ではなくタブ区切りの.txtテキストファイルやTSV(タブセパレートバリュース)ファイルを使います。
なので、ここではカンマではなくタブにチェックを入れると区切りがうまく設定できます。(AMAZONのタブ区切りテキストやTSVについて詳しくは後述)
区切りが設定できたら、次へをクリック。
いよいよCSVを文字化けさせずに開く方法、最後の手順です。
ここでCSVファイルを開く際に各列の書式設定をどうするかを設定できます。
そう、ここが一番大事なポイントで、全列を文字列に設定して開くことでExcelにデータを書き替えられずに済むのです。
黒くなっている部分が現在選択している列。黒く選択した列ごとに書式を文字列ほか日付などに変更が可能です。しかし一列ずつ作業するのは面倒。
そこで、Shiftキーを押しながらクリックをすると範囲選択ができます。
Shiftキーによる範囲選択は 始点をクリック → 終点をShiftを押しながらクリック で間も含めて全部選択してくれる便利機能。
最初に一番左の列が指定されていますので、一番右端の列まで一気に範囲指定し、全列(全セル)の書式設定を文字列に指定しましょう。
全て文字列にし終わったら完了ボタンをクリックです。ちなみにテキストファイルウィザードの3つの画面は戻ると次へボタンで自由に行き来し、設定をやり直すことが可能です。
最後に現在のExcelブックに読み込んだデータを指し込みか、完全に新しいブックに読み込んで表示するかを選択できます。
今回の手順では新しいブックからの紹介していますので、既存のワークシートのままでOKをクリックすれば大丈夫です。
これで読み込みは完了。
ご覧の通り、-から始まるセルも0から始まる数列も全て文字列として扱われ、表示崩れや中身の書き換えがなされていない状態でExcelで読み込むことができました。
注意点1 CSVではなくExcelブックとして扱われている
データ読み込みの方法で開いた場合、CSVファイルそのものを開いたのではなくCSVファイルよりデータを読みとってきた全く新しいファイルとなっています。
ファイルを保存しようとすると名前を付けて保存状態になるので、アップロード用のファイルとしては保存時にファイルの種類をCSV(カンマ区切り)に指定しましょう。
なお、今回のやり方では文字列として読み込んでいます。が、その後CSVやTSVで保存したファイルをExcelで再び開くと、セル書式は全て標準に戻ってしまいます。
これは、CSVや後述するTSV規格はセル書式を保存しないため。その場合、再度表示崩れやデータの書き換えなく開くためにはもう一度データ読み込みより開く必要があります。
もし今後もそのCSVファイルを使う可能性があるのであれば、一旦xlsやxlsxなどのExcelブックとして保存しておくことをオススメします。
そして編集後にアップロード用ファイルとしてCSVで書き出す、という形をとれば全列全セルが文字列のままで保存できるので、今後Excelで開いても崩れなどが起こらない状態にすることができます。
WEBデザインに携わる方にわかりやすくたとえるなら、xlsxファイルはPDSファイルでCSVファイルはJPGファイル。PSDファイルからJPGファイルを書き出すように、xlsxファイルからアップロード用CSVファイルやTSVファイルを書き出すイメージです。
注意点2 AMAZONで使うのはCSVではなくTSV
楽天市場やYahoo!ショッピングで商品情報などを扱うのはカンマ区切りCSVですが、AMAZONセラーセントラルにアップロードするファイルはファイルの保存形式でテキスト(タブ区切り)を選択します。
AMAZONはCSVではなくタブ区切りのテキストファイルやTSV(タブセパレートバリュース)を使う仕様であるため。
.txt拡張子のテキストファイルや.tsv拡張子のTSVファイルではなく、.csv拡張子のCSVファイルをアップロードするとエラーが出るので注意。
実際に.txtと.tsvのどちらを使うかはアップロードする場所によっても違いますので、その辺りはAMAZONセラーセントラルでご確認ください。
タブ区切りテキストやTSVファイルを開く方法については下記でも別途詳しく解説しています。
基本的には本ページと同じで、途中の区切り文字をカンマではなくタブにするだけ。
CSVファイルの全セル書式設定を文字列で開く方法まとめ
- CSVファイルをExcelでそのまま開くと先頭の0が消える、セルの中身が書き換えれるなどの現象が起きてしまい、エラーの原因になる可能性がある。
- Excelのデータ読み込み機能を使うことで全セルを文字列とした状態で開き書き換えを回避することができる。
ただし、この方法では時折CSVの列や行が大きく崩れてしまう場合があります。
(なぜかそのまま開くと列や行は崩れないのに)
そうなると考えられる可能性、要因がいくつもあるため回避は容易ではありません。その場合はExcelを使うことを諦め、他のソフトを使うと良いでしょう。
もともとCSVといったデータベースに近いファイルはマイクロソフトのofficeソフトの中ではExcelではなくAccessの方が向いています。
ただ、サーバー屋さんやシステム屋さんといった専門的な職種出もない限りAccessまで導入している方は少ないことでしょう。
そこで、管理人としてはCSV専用のフリーソフトとしてcassavaをオススメしています。
その辺りは他の記事でご紹介していますので、下記関連記事よりご覧ください。
ディスカッション
コメント一覧
まだ、コメントがありません