VBAユーザーは、WindowsのUTF-8設定をONにするな

コラム

Windows 10以降、「ワールドワイド言語サポートでUnicode UTF-8を使用」という設定項目が追加されました。プログラミングの世界ではUTF-8が標準となって久しい現在、この設定は魅力的に映るかもしれません。しかし、VBAユーザーにとって、このチェックボックスは触れてはいけないスイッチです。

今回は、文字エンコーディング(文字コード)に詳しくない方に向けて、なぜVBAユーザーはUTF-8設定を避けるべきなのか、そしてなぜVBAを使い続ける必要があるのかを解説します。

Windowsの「UTF-8を使用」設定とは?

コンピュータは文字を数値として扱います。「あ」という文字をどの数値に対応させるか、そのルールを「文字エンコーディング」と呼びます(一般には「文字コード」とも呼ばれます)。

通常、日本語版のWindowsでは、古いソフトウェアとの互換性を保つために「Shift-JIS」(正式にはCP932、Windowsコードページ932)という文字エンコーディングが標準で使用されています。一方、Web開発や最新のプログラミング言語(PythonやJavaScriptなど)では、世界中の文字を統一的に扱える「UTF-8」が標準です。

Windowsの「ワールドワイド言語サポートでUnicode UTF-8を使用」オプションは、Windows全体をこのUTF-8標準に切り替えるための機能です。UTF-8を標準とするMacとのファイル共有時に文字化けが減るなどのメリットがあり、将来的にはWindowsの標準になると言われています。

VBAユーザーは要注意:この設定をしてはいけない

VBAを使用するパソコンでは、この設定を有効にしてはいけません。

理由は単純です。VBA(Visual Basic for Applications)の開発環境であるVBE(Visual Basic Editor)がUTF-8に対応していないからです。VBAは30年近く前の設計を引き継いでおり、日本語環境ではShift-JISで動くことを前提に作られています。

もしWindowsの設定をUTF-8に切り替えてしまうと、以下のような問題が発生します。

  • コード内の日本語が文字化け:変数名やコメント、文字列が解読不能な記号の羅列になります。
  • 既存のマクロが動かなくなる:最悪の場合、ファイルが破損したり、VBEが開かなくなったりします。

なお、この設定は正式名称に「ベータ」という語が含まれており(「ベータ:ワールドワイド言語サポートでUnicode UTF-8を使用」)、VBAのような古いアプリでの動作は保証されていません。

VBAがUTF-8に対応する未来はあるか?

「MicrosoftがVBAをアップデートして、UTF-8に対応させればいいのでは?」と思うかもしれません。

しかし、その可能性は低いと私は考えています。VBAの基礎部分は非常に古く、これを現代のUTF-8に対応させるには、根本からの作り直しに近いコストがかかります。Microsoftの現在の注力分野(クラウド、AI、Web)を考えると、レガシーなVBAをUTF-8に対応するための投資が行われるとは考えにくいのが現状です。

Office Scriptへの移行が難しい「本当の理由」

VBAが進化しないなら、後継とされる「Office Script(TypeScript)」に移行すればいい、という話によくなります。Office ScriptならUTF-8に完全対応しており、文字エンコーディングの問題は解決します。

しかし、多くの実務でVBAからOffice Scriptへの完全移行は困難です。それはなぜでしょうか?

よく「ユーザーフォームが作れないから」と言われますが、問題の本質はもっと深いところにあります。

1. Word版のOffice Scriptが存在しない

まず、大前提として知っておくべき事実があります。Office Scriptは現在、実質的にExcel専用の機能であり、Word版は一般公開されていません

Wordで文書作成の自動化やフォーマット整形のマクロ(VBA)を利用している方は多いと思いますが、これらを移行する先となる技術がそもそも存在しないのです。

Excelのマクロは一部移行できたとしても、Wordのマクロに関しては、VBAを使い続ける以外に選択肢がありません。

2. 問題の本質は「UI(ユーザー・インターフェイス)の操作」

Excel単体で見たとしても、VBAとOffice Scriptには決定的な違いがあります。それは、UIを介して、Excelという「アプリケーション自体」を操作できるかどうかです。

VBAができること:アプリケーション全体を制御できます。

  • メニューやリボンから実行できる機能(書式設定、並び替えなど)をコードから直接制御する
  • 「検索と置換」や「並び替え」ダイアログボックスを表示し、設定値の取得や指定を行う
  • ウィンドウのサイズを変える、アプリを最小化する

Office Scriptができること:ブックの中身(データ)の操作に限定されます。

  • セルの値を書き換える
  • グラフを作る
  • ピボットテーブルを更新する

Office Scriptはあくまで「データの処理」に特化しており、アプリケーション自体のメニューやウィンドウを制御する機能を持っていません。これが、VBAを手放せない最大の理由です。

当面の対応

では、UTF-8化が進む世界で、VBAユーザーはどうすればいいのでしょうか?

私の考えは、「Copilot(AI)の進化を待つ」です。

Web技術をベースにしているOffice Script自体に、VBAのような強力なUI操作機能が付与されることは、セキュリティの観点からも考えにくいでしょう。このため、将来的にはCopilotがVBAの役割を担う可能性があると私は予想しています。(同じように、WordやExcelを外部から操作するPower Automateにも、VBAのような機能が付与されることもないでしょう。)

  • 現在:VBAコードを書いて、リボンやダイアログを操作させている。
  • 将来:Copilotに「この表を売上順に並び替えて」と指示し、AIがExcelのUIを操作する。

AIがVBAと同じレベルでOfficeアプリのUIを自由に制御できるようになるその日まで、以下の運用が現実的な選択だと考えます。

  • WindowsのUTF-8設定はOFFのままにする(VBAを守るため)。
  • データ処理中心の新しいタスクは、Office ScriptやPower Automateでの作成を検討する。
  • UI操作が必要な既存業務は、引き続きVBAを使う。

「VBAは古い」と言われますが、ExcelやWordというアプリケーションの手足となって動けるのは、今でもVBAだけなのです。

コメント

タイトルとURLをコピーしました