見出し画像

【Excel VBA】UTF-8のCSVファイルが文字化けする問題の解決法

WebシステムからダウンロードしたCSVファイルをExcelで開いたら、日本語の部分が全て意味不明な記号になってしまった…。そんな「文字化け」に、頭を悩ませた経験はありませんか?

これは、ファイルが「UTF-8」という世界標準の文字コードで書かれているのに対し、日本語版のExcelが、古い「Shift_JIS」というルールでファイルを開こうとして、文字の解釈に失敗しているのが原因です。

今回は、VBAマクロを使ってCSVファイルを読み込む際に、この文字コードを正しく指定し、文字化けを完全に防ぐための、非常に重要なテクニックを解説します。

この文字化け問題は、CSVファイルを開くためのWorkbooks.OpenTextメソッドに、「このファイルはUTF-8ですよ」と、はっきりと教えてあげることで解決します。

  • キーとなるパラメータ:Origin: Workbooks.OpenTextメソッドには、Originという、ファイルの「出自」や「源流」、すなわち文字コードを指定するための、専門の引数が用意されています。

  • UTF-8の指定方法: このOrigin引数に、UTF-8を表す特別な番号である**65001**を指定します。これにより、VBAはExcelに対して、「このCSVファイルは、UTF-8のルールで書かれているから、そのつもりで開いてください」と明確に指示を出すことができます。

  • その他の設定: OpenTextメソッドでは、同時に、区切り文字が「カンマ(Comma)」であることなども指定できます。これらの設定を組み合わせることで、様々な形式のテキストファイルを、正確にExcelシートへ展開できます。

手作業で開くと文字化けしてしまうファイルも、VBAから文字コードを指定して開くことで、常に正しく表示させることが可能になります。

私の運営サイトでは、このWorkbooks.OpenTextメソッドでOrigin:=65001と指定し、UTF-8で書かれたCSVファイルを文字化けさせずに読み込む、という具体的なVBAコードを分かりやすく解説しています。

▼詳しい解説とサンプルコードはこちら Excel VBAで文字コード(UTF-8など)を指定してCSVファイルを正しく読み込む方法

Webシステムとのデータ連携が一般化した現代において、UTF-8形式のデータを正しく扱うスキルは不可欠です。OpenTextメソッドによる文字コードの明示的な指定は、異なるシステム間でデータをやり取りする際の、信頼性を担保する基本となります。

いいなと思ったら応援しよう!

コメント

コメントするには、 ログイン または 会員登録 をお願いします。
プログラムを書いています。メイン言語はVBA、C++、C#、Python。Webサイトも運営しているので、noteのプロフィール欄URLから私のサイトにぜひお越しください! https://morinokabu.com/
【Excel VBA】UTF-8のCSVファイルが文字化けする問題の解決法|morinokabu
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1