ExcelでUTF-8のCSVを文字化けなく取り込む
Microsoft ExcelでCSVファイルを開くと文字化けしててうんざりというシーンは、ちょいちょい見かけます。最新の有償のクラウド勤怠管理システムのレポートデータをCSVでダウンロードして開いたら、文字化けで読めないというシーンが自分の場合毎回あります(サブスクのクラウドシステムでコレはちょっと酷すぎると思います)。
さて、このExcelの文字化け問題ですが、現在最新のMicrosoft365のExcelではいくつかの回避手段と対応策があります。古典的なテクニックも含めて、まとめてみました。
目次
今回利用するツール等
- メモ帳
- Power Query
- Excel CSV I/O
今回簡単に使えるツールでいくつかのUTF8のCSVを取り込んでみたいと思います。サンプルデータは、個人情報テストデータジェネレータを利用して生成しています。
なぜこの現象が起きてしまうのか?
割りと長年苦しめられてきたこのUTF8の文字コードのCSV文字化けトラブルですが、旧来からあったShift-JIS形式のCSVではダブルクリックで開いても文字化けすることはありません。しかし、最近の基幹業務システムやウェブサービスで出力される多くのCSVはUTF8でエンコードされたCSVです。
このUTF8には2種類あって、BOM付きとBOM無しがあり、BOM(Byte Order Mark)とは、データの先頭に入れるコードで、文字コードの識別の為に利用されているのですが、多くのアプリがBOM無しでも自動判定してくれるものが多い中、Excelは未だに「BOM有り」でなければUTF8と判定しないという仕様の結果このようなトラブルが起きています。つまり、UTF8だから文字化けするのではなく、BOM無しUTF8だから問題が起きてるのです。
クラウドサービスからダウロードした多くのCSVが「BOM無しUTF8」であることが多く、そのままダブルクリックして毎回のように文字化けを見る羽目になるわけです。
図:こうなってしまうのには理由がある
対応策
Power Queryを使う事例
ダブルクリックで開くのではなく、Excelの取り込み機能を利用して、BOM無しUTF8のCSVを取り込む事が可能です。以下の手順で取り込みます。
- データタブを開き、「テキストまたはCSVから」をクリックする
- UTF8のCSVを指定する
- ダイアログが出たら、元のファイルの指定を「65001 : UTF-8」を指定する
- 読み込みの隣の▼をクリックして、読み込み先を選ぶ。データの変換をクリックするとPower Queryが起動する
- データのインポートダイアログでは、既存のワークシートを選び、セルをクリックして、OKをクリックする
- クエリが作成されて、指定の場所にテーブルとして出力されます。
CSVの途中に改行があると別レコードになってしまうので、その点は要注意です。
図:外部データ取り込み機能を使う
図:文字コード指定すると文字化け解消
メモ帳を使う事例
昔からある古典的なテクニックです。なんだかんだ皆この手法をやってるんじゃないかと思います。この手法には2パターンあり、どちらであっても問題なく、Excelで直接開けます。
ANSIにして保存し直す
メモ帳で一旦CSVファイルを開いて、名前を付けて保存を実行する際に、文字コードを「ANSI」にする事で、Shift-JISに変換されて保存されるので、Excelで直接開けるようになる。
図:なんだかんだShift-JISがベター
BOM有りUTF8として保存し直す
上記の場合、Shift-JISとなるため、場合によっては次のシステムで使う場合に具合が悪いことがあります(UTF8じゃないと受け付けないというシステムがあったりします)。その場合には名前を付けて保存する場合には、「UTF-8 (BOM付き)」にすることで、UTF8を維持しつつ、BOMの付いたCSVとなるので、Excelでもシステム側でも利用が出来ます。
※但し、BOM付きだと正しく動作しないシステムというのも存在するので、その辺はよく見極めて適用しましょう。
図:BOM付きで保存するだけです
Excel CSV I/Oを使う事例
アドインのインストール
Excel CSV I/Oというアドインを導入しておく事で、プレーンテキストとして取り込むのが容易になります。導入手順と使い方は以下の通り。また、ただ取り込むだけじゃなく、Excelが勝手に解釈して頭の0を取り除いたりしないようにインポートしてくれるアドインがこのツール。
- ウェブサイトからExcelCsvIO.zipをダウンロード、解凍する(ドキュメントフォルダなどに解凍しましょう)
- 中に入ってるinstall.vbsをダブルクリックして実行する
- アドインがインストールされる
- Excelを起動するとメニューにCSV I/Oが表示される。されない場合は以下の手順
- 開発タブを開く。表示しておくようにしましょう。
- Excelアドインをクリックする
- ダイアログが開いたら、参照をクリック
- 2.の中に入ってる「ExcelCsvIO.xlam」を選択する
- Excelcsvioが表示されチェックされた状態になる。OKをクリックして閉じる
図:手動でインストールする方法
アドインを使ってみる
CSV I/Oのタブを開いてたら以下の手順で取り込む
- インポートをクリックする
- カンマ、UTF-8、CR+LFが選択されてる状態で、インポートをクリックする
- ファイルを選択する
- 取り込まれる
- 閉じるクリックで、ダイアログを閉じる
但し、2.の改行コードの部分で、CR+LFだと全部が1列で取り込まれてしまうケースがあるので、その場合LFやCRに変更するとうまく取り込まれます(文字コードだけじゃなく改行コードが違うケースもあるのでCSVは本当に面倒臭い)。さらにエクスポートも可能で、このアドインは入れておくと色々と手間が減って便利です。
図:インポートダイアログ