Excelでデータを扱っていると、CSVファイルを開いた際に文字化けが発生したり、他のシステムにデータを渡す際にエンコードが合わずに困った経験はないでしょうか。
文字コードの問題は、特にUTF-8とShift-JISの違いによって引き起こされることがほとんどです。
この記事では、Excelで文字コード・エンコードを変更する方法を、CSV取り込みの基本からPower QueryやVBAを使った実践的なテクニックまで、わかりやすく解説していきます。
文字化けに悩んでいる方も、初めて文字コードについて学ぶ方も、ぜひ最後までご覧ください。
Excelで文字コード・エンコードを変更する最短の方法
それではまず、Excelで文字コード・エンコードを変更するための結論からお伝えしていきます。
Excelで文字コードを変更する方法は大きく分けて3つあります。
「Power Queryを使う方法」「テキストウィザードを使う方法」「VBAを使う方法」の3種類です。
日常的な作業であればPower Queryが最もおすすめで、GUI操作で直感的にエンコードを指定できます。
以下の表に、それぞれの方法の特徴をまとめました。
| 方法 | 難易度 | 対応エンコード | おすすめシーン |
|---|---|---|---|
| Power Query | 初級〜中級 | UTF-8・Shift-JIS・その他多数 | 定期的なCSV取り込み |
| テキストウィザード | 初級 | UTF-8・Shift-JIS | 一度きりの取り込み |
| VBA(マクロ) | 上級 | UTF-8・Shift-JIS・その他 | 自動化・大量処理 |
まずはどの方法が自分の用途に合っているかを確認した上で、以降の詳細解説へ進んでみてください。
Excelは標準でShift-JISを使用しており、UTF-8のCSVをそのまま開くと文字化けが発生します。
文字化けを防ぐには、インポート時にエンコードを正しく指定することが最重要ポイントです。
文字コードとエンコードの基礎知識
文字コードとは、文字をコンピューターで扱うために数値に変換するルールのことです。
代表的なものにUTF-8・Shift-JIS・EUC-JP・Unicodeなどがあります。
Excelが標準で使用しているShift-JIS(CP932)は日本語Windowsに最適化されていますが、WebサービスやLinux系のシステムではUTF-8が主流です。
この違いが「文字化け」の主な原因となっています。
よくある文字化けのパターン
文字化けには主に2つのパターンがあります。
1つ目はUTF-8のCSVをExcelで直接開いた場合で、日本語が「繧ャ繝シ繝吶Ν」のような文字列に化けてしまいます。
2つ目はShift-JISのファイルをUTF-8として読み込んだ場合で、こちらも同様に文字が正しく表示されません。
どちらも対処法は同じで、正しいエンコードを指定して読み込み直すことが解決策となります。
BOM(バイトオーダーマーク)とは
UTF-8ファイルには「BOM付き」と「BOMなし」の2種類があります。
BOM(Byte Order Mark)とは、ファイルの先頭にエンコード情報を示す特殊な符号を付加したもので、Excelはこれを手がかりにUTF-8を自動認識します。
BOM付きUTF-8であれば、ExcelでCSVをダブルクリックして開いても文字化けしません。
一方、BOMなしUTF-8はExcelが自動認識できないため、インポート時に手動でエンコードを指定する必要があります。
Power QueryでCSVのエンコードを指定して取り込む方法
続いては、Power QueryでCSVのエンコードを指定して取り込む方法を確認していきます。
Power QueryはExcel 2016以降で標準搭載されており、エンコードをGUI上で選択できるため、最もスムーズに文字コードを変更できる手段です。
Power QueryでCSVを取り込む基本手順
まず、Excelを開いて「データ」タブをクリックします。
次に「データの取得」→「ファイルから」→「テキスト/CSVから」を選択します。
取り込みたいCSVファイルを選択してプレビュー画面が表示されたら、左上の「ファイルの発信元」ドロップダウンに注目してください。
ここでエンコードを「65001: Unicode (UTF-8)」または「932: 日本語(シフトJIS)」に変更することで、文字化けなくデータを取り込めます。
エンコード番号の対応一覧
Power Queryでは数値でエンコードを指定します。
よく使う対応番号を以下の表にまとめました。
| コードページ番号 | エンコード名 | 用途・説明 |
|---|---|---|
| 65001 | UTF-8 | Web・Linux・Mac系で主流 |
| 932 | Shift-JIS(CP932) | Windows日本語環境の標準 |
| 20932 | EUC-JP | Unix系の日本語エンコード |
| 1200 | UTF-16 LE | 一部システムで使用 |
Power Queryで変換後に保存する手順
エンコードを選択してプレビューが正常に表示されたら、「読み込み」ボタンをクリックします。
するとExcelのシートにデータが取り込まれます。
このデータをCSVとして別のエンコードで保存したい場合は、「ファイル」→「名前を付けて保存」からファイル形式を「CSV UTF-8(BOM付き)(*.csv)」に変更するとよいでしょう。
Excel 2019以降では「CSV UTF-8(BOM付き)」という形式が選択肢に追加されており、UTF-8での保存が簡単になっています。
テキストウィザードを使ってShift-JIS・UTF-8を変換する方法
続いては、テキストウィザードを使ってShift-JIS・UTF-8を変換する方法を確認していきます。
テキストウィザードは、Power Queryが使えない環境やExcel 2013以前のバージョンでも利用できる昔からの定番の取り込み手順です。
テキストウィザードでCSVを開く手順
CSVファイルをダブルクリックで開いてしまうと文字化けが起きることがあります。
そこで、まずExcelを起動してから「データ」タブ→「外部データの取り込み」→「テキストファイル」の順にクリックします。
読み込みたいCSVファイルを選択すると「テキストファイルウィザード」が起動します。
ウィザードのステップ1画面で「ファイルの元の形式(文字コード)」を変更できます。
ファイルの元の形式:
▼
← ここを変更!
戻る
次へ ▶
区切り文字と列のデータ形式を設定する
ステップ2では区切り文字を設定します。
CSVファイルであれば「コンマ」にチェックを入れるのが基本です。
ステップ3では各列のデータ形式を指定できます。
日付や数値が含まれる列は「文字列」に設定しておくと、先頭ゼロの脱落や日付の自動変換を防ぐことができます。
既存シートへの貼り付けと注意点
ウィザードの最終ステップで「既存のワークシート」を選択すると、開いているシートの任意のセルからデータを展開できます。
この方法はシンプルで便利ですが、大量データの場合は処理に時間がかかることがあります。
また、テキストウィザードで取り込んだデータは自動更新機能がないため、定期的に取り込む場合はPower Queryの使用を強くおすすめします。
テキストウィザードは「データ」タブに表示されない場合があります。
その際は「ファイル」→「オプション」→「データ」→「レガシデータインポートウィザードの表示」から「テキストから(レガシ)」を有効化してください。
VBAでエンコードを変換してCSVを保存する方法
続いては、VBAでエンコードを変換してCSVを保存する方法を確認していきます。
VBAを使えばUTF-8・Shift-JIS間の変換を自動化でき、大量のファイルを一括処理する際に非常に効果的です。
ADODB.Streamを使ったUTF-8読み込みコード
ExcelのVBAでUTF-8ファイルを読み込むには、標準のOpenステートメントではなく「ADODB.Stream」オブジェクトを使用します。
これはWindowsに標準搭載されているADOライブラリで、様々なエンコードに対応しています。
Sub ReadUTF8CSV()
Dim objStream As Object
Set objStream = CreateObject(“ADODB.Stream”)
objStream.Charset = “UTF-8”
objStream.Open
objStream.LoadFromFile “C:\data\sample.csv”
Dim strText As String
strText = objStream.ReadText
objStream.Close
End Sub
上記のコードで読み込んだテキストを行ごとに分割し、セルに書き込むことでUTF-8のCSVを正しく展開できます。
Dim objStream As Object
Set objStream = CreateObject(“ADODB.Stream”)
objStream.Charset = “UTF-8” ← エンコード指定
objStream.Open
objStream.LoadFromFile “C:\data\sample.csv”
Dim strText As String
strText = objStream.ReadText
objStream.Close
End Sub
中断
UTF-8でCSVを書き出すVBAコード
ExcelのデータをUTF-8エンコードのCSVとして書き出す場合も、同様にADODB.Streamを使用します。
標準の「名前を付けて保存」でCSVを選ぶとShift-JISになってしまうため、UTF-8で出力したい場合は以下のようなVBAが便利です。
Sub WriteUTF8CSV()
Dim objStream As Object
Set objStream = CreateObject(“ADODB.Stream”)
objStream.Charset = “UTF-8”
objStream.Open
objStream.WriteText “名前,部署,売上”, 1
objStream.WriteText “田中 太郎,営業部,1200000”, 1
objStream.SaveToFile “C:\data\output_utf8.csv”, 2
objStream.Close
End Sub
「SaveToFile」の第2引数に「2」を指定することで既存ファイルへの上書きが可能です。
BOM付きで保存したい場合はCharsetを「UTF-8」のまま使用し、BOMなしにしたい場合は別途BOMを除去する処理を加える必要があります。
一括変換マクロの組み方と注意点
フォルダ内のCSVを一括でShift-JISからUTF-8に変換するマクロを組む際は、「Dir関数」でファイルを列挙してループ処理するのが定番です。
注意点として、変換前のファイルは必ずバックアップを取っておきましょう。
特殊文字(〜・①・㈱など)はShift-JISとUTF-8で互換性がない場合があり、変換後に文字が消えたり置き換わったりするケースがあります。
変換後はサンプルデータで必ず動作確認を行うことが重要です。
| A | B | C | D(変換結果) | |
| 1 | 名前 | 部署 | 文字列 | URLエンコード |
| 2 | 田中 太郎 | 営業部 | テスト | %E3%83%86%E3%82%B9%E3%83%88 |
| 3 | 鈴木 花子 | 総務部 | サンプル | ↓ オートフィルで展開 |
| 4 | 山田 次郎 | 開発部 | データ | ↓ オートフィルで展開 |
D2セルに数式を入力 → 右下の■(フィルハンドル)をD4までドラッグしてオートフィル
VBAでのエンコード変換は強力ですが、特殊文字の扱いには注意が必要です。
変換前に必ずバックアップを取り、小規模なサンプルデータで動作確認を行ってから本番処理を実施しましょう。
まとめ
この記事では、Excelで文字コード・エンコードを変更する方法として、Power Query・テキストウィザード・VBAの3つのアプローチを解説しました。
日常的なCSV取り込みにはPower Queryが最適で、一度きりの処理にはテキストウィザード、自動化や大量処理にはVBAが向いています。
UTF-8とShift-JISの違いを理解し、目的に合った方法を選ぶことが文字化けトラブルを防ぐ近道です。
BOM付きUTF-8の活用やエンコード番号の意味を押さえておくと、より柔軟にファイルを扱えるようになるでしょう。
今回紹介した手順を参考に、ぜひExcelでの文字コード変換を使いこなしてみてください。