背景
ある日、VBAの編集をVS-Codeでしようと思い、編集中のスクリプトをVBEからエクスポートして、VS-Codeに読み込ませたら文字化けをしていた・・・
エンコードを確認したら、おすすめが Shift-JIS になっているではないか?
「なぜだろう?」と思い、いろいろ調べた内容とわたしの考察を以下に記しています。
🧠 そもそも、UTF-8でコードを書く理由はなんだろうか?
✅1.プログラマーがUTF-8を好む理由
-
UTF-8はUnicodeをエンコードする方法の一つ - ASCIIをそのまま互換できる ※ 詳細は2. ASCIIとの完全互換性を参照
- そのうえ日本語、中国語、絵文字なども表現できる
- 日本語、韓国語、中国語(2バイト)など地域独自の規格に分ける必要がない
- 1バイトごとにエンコードするので、「リトル/ビックエンディアン問題」の影響を受けない
→世界共通の標準なので、国際化対応・多言語化が圧倒的に楽。
✅2.ASCIIとの完全互換性
-
Aや+や;などの**ASCII文字は1バイトのまま - UTF-8やASCIIの0x00~ox7Fをそのまま使うので、**古いツールやプロトコル(HTTP,JSON,C言語の文字列)**でも壊れない
🧩 例:
| 文字 | ASCII | UTF-8 | バイト数 |
|---|---|---|---|
| A | 0x41 | 0x41 | 1 |
| あ | ― | E3 81 82 | 3 |
✅3.エンディアン(バイト順)の影響を受けない
- UTF-16やUTF-32は「リトル/ビックエンディアン問題」がある
- ビックエンディアンで保存したデータをリトルエンディアンで読み込むと文字化けする
- 逆もしかり・・・
- UTF-8は1文字1バイトなので、上記問題が起こりえない
🧩参考:
| 文字 | Unicodeコードポイント | UTF-16BE(ビッグエンディアン) | UTF-16LE(リトルエンディアン) | 備考 |
|---|---|---|---|---|
| A | U+0041 | 00 41 | 41 00 | 英字(1コードユニット) |
| 日 | U+65E5 | 65 E5 | E5 65 | 漢字(BMP内) |
| 😊(スマイル) | U+1F60A | D8 3D DE 0A | 3D D8 0A DE | 顔文字 (※UTF-8:f0-9f-98-8a) |
✅4.文字化けが起きにくい
-
Shift-JISやEUC-JPは「日本語だけの独自規格」なので、日本語非対応環境で開くと「文字化け」しやすい(対応していてもエンコードの設定をいじるのがめんどい・・・) - UTF-8はほぼすべてのプラットフォーム・ブラウザ・エディタで標準サポートされている。(サポートされていないエディタを見たことない)
🧠 ではなぜVBE(Visual Basic Editor)はShift-JISを使っているのか?
✅1.VBEは90年代の日本語Windows文化の上に築かれた
- VBEは Visal Basic 3.0Base (Excel 5.0;1993年) をベースにした
古いエディタです - 当時の日本語Windowsは「Shift-JIS」が標準コードだった
- そのため、VBAの文字列リテラルやソースファイルもShift-JISで保存される設計。
✅2.Excelの内部構造もShift-JIS依存
- いまさら、UTF-8に切り替えたら過去30年以上のマクロがすべて文字化けする
- 変数名とかが日本語になっているコードは漏れなく動かなくなる
(笑)
→ Microsoftは後方互換性を最重視しており、Shift-JISを維持せざるを得ないのです。
- 変数名とかが日本語になっているコードは漏れなく動かなくなる
✅3.VBEは単体アプリではなく「Officeの内臓機能」
- VBEは単体で更新されるわけではなく、Officeの一部として動作します
- VBAエディタ内部は古いCOMアーキテクチャ上で動作しており、
Unicode(UTF-16)変換を前提とした再設計は大がかりすぎる。
→ Microsoftも「壊れないこと」を優先し、
Shift-JISのまま残していると考えられます。
🧠今後、VBEがUTF-8に対応する可能性はあるのか?
💬 現状:UTF-8対応のVBEは存在しない
💡 将来的にもUTF-8対応になる可能性は低い
理由
- VBEが「レガシー技術」で、ほぼ開発停止状態だから(長らく機能面でのアップデートがない)
- そもそもMicrosoftは「代替技術」を推しているから(Office Script, Power Automate, Add-in, .NET ...)
🧩参考:代替技術
| 技術 | 概要 | 文字コード |
|---|---|---|
| Office Scripts | Excel Online / 365用の自動化(TypeScriptベース) | UTF-8 |
| Power Automate | クラウドフローでOffice操作を自動化 | UTF-8(JSONベース) |
| Add-in(JavaScript API) | WebView上でOfficeと連携 | UTF-8 |
| .NET / VSTO | VB.NETやC#からOfficeを制御 | UTF-16(.NET標準) |
公式ドキュメント
- VBAの使い道について記述した記事があり (2022.08.06)
- VBScriptが非推奨になった理由と廃止計画について言及 (2024.05.22)
- VBEに関して開発やアップデートに関する記述がみあたらない
→VBEに関しては公式が沈黙している・・・
📒まとめ
VBEは1990年代のShift-JIS前提の設計をそのまま引き継いでおり、
Unicode(UTF-8 / UTF-16)化には内部構造の全面改修が必要。
しかしMicrosoftは互換性維持を優先し、
「壊さないために更新しない」 方針を取っている。
📎 一言で言うなら:(chat-GPT5の毒舌)
💬 「VBEは“Shift-JISで止まった時代の産物”。」
文字コードの壁を超えるには、エディタ自体の再設計が必要。
でもMicrosoftは、もうそこに投資しない。
参考
- 『CODE コードから見たコンピュータのからくり 第2版』
Charles Petzold (著), 酒匂 寛 (翻訳) - Unicode文字一覧表
- Microsoft Ignite; MsoEncoding enumeration (Office)
- ウィキペディア:Visual Basic for Applications
- Wikipedia:Visual Basic for Applications
- Wikipedia; Code page 932 (Microsoft Windows)