VBA マクロの Office バージョンアップ時の互換性

Last Update:

こんにちは、Office サポート チームの中村です。

Office 2019 や Office LTSC 2021 といった Office 永続ライセンスの新しいバージョンへの変更や、Microsoft 365 Apps のバージョン更新にあたって、これまで動作していた VBA マクロが引き続き同じように動作するのかを懸念するご質問を頂くことがあります。
今回の記事では、このような Office バージョンアップ時の VBA マクロの互換性の考え方について記載します。

初めに結論を記載すると、元々利用していたバージョンが Office 2016 以降であれば、基本的な互換性は保持されており、ほとんどの場合は問題ありません。ただし、VBA マクロの処理の流れに依存して、Office の細かな動作変化が影響することは稀にあります。
このような動作しなくなるシナリオを網羅して弊社から案内することはできません。
最終的に確実な互換性を担保したい場合は、検証を通して確認していただく必要があります。

以下、VBA マクロの動作に関わる要素ごとに詳しく解説します。

1. VBA ランタイム


VBA はプログラム言語の 1 つであり、この VBA 言語を解釈して実行する VBA ランタイム自体にバージョンを持ちます。
VBA ランタイムは Office アプリケーションに同梱されていますが、現在サポートされる Office 2016 以降、Office 2019 / Office 2021 / Microsoft 365 Apps のいずれもバージョン 7.1 で統一されており、VBA ランタイムのバージョン更新はありません。
また仮に VBA 7.1 より古いバージョンで作成した VBA コードを含む Office ファイルであっても、VBA コードを実行環境で再コンパイルして実行できます。

以上のことから、VBA ランタイムの観点で互換性を気にする必要はありません。

2. Office オブジェクト ライブラリ


VBA マクロの処理内容の中心は、Office アプリケーションに関する処理を行うことです。これには通常、Office オブジェクト ライブラリ内のオブジェクト / メソッド / プロパティなどを使用します。
例えば、「Microsoft Excel 16.0 Object Library」ライブラリでは、Workbooks.Open メソッドなどの Excel アプリケーションとのやり取りを行うためのオブジェクトを提供しています。VBA マクロからは、[参照設定] でこれらのライブラリを参照したり、レイト バインディングと呼ばれる手法で実行時にライブラリを参照して利用します。

2-1. ライブラリ バージョン


これらの Office アプリケーションとやり取りするためのオブジェクトを提供するライブラリは、Office に同梱されています。Office 2016 以降、Office 2019 / Office 2021 / Microsoft 365 Apps のいずれにおいても、バージョン「16.0」から変更はありません。このため、ライブラリ自体のバージョンが変わり、参照できなくなるといった問題は発生しません。

また、Office 2013 以前は「15.0」など、Office バージョンごとに異なるバージョンでした。この場合も、古いバージョンから新しいバージョンへの互換性は考慮されています。例えば Office 2013 で作成した VBA コードを、Microsoft 365 Apps 環境で実行する場合、自動的に新しいバージョンの同じライブラリを参照して動作します。
ただし、反対に新しいバージョンで作成した VBA コードを古いバージョンで実行する場合は、利用アプリケーションとライブラリの組み合わせによっては参照できません。

2-2. ライブラリ内のオブジェクト モデルの廃止 / 変更


ライブラリ内で提供するオブジェクト モデルについては、Office 2016 より前のバージョンからの更新の場合、いくつかの互換性に影響が生じる廃止・変更があります。これらは、以下の公開情報でご案内しています。

Office の互換性に関する問題
https://learn.microsoft.com/ja-jp/office/client-developer/shared/compatibility-issues-in-office

一方、Office 2016 以降は、既存のオブジェクト モデルに対し、メソッドなどが削除されたり、メソッド呼び出し時の必須パラメーターが追加されるといった、これまでのオブジェクト モデルの用法に影響を与えるような破壊的変更はありません。

3. Office アプリケーションの動作変化


ここまでの 1. / 2. の観点からは、Office 2016 以降のバージョンから、より新しいバージョンへの更新において、通常 VBA マクロの動作に影響はありません。
ただ重要な点として、VBA マクロは、Office アプリケーション等に対する処理要求を行っているということです。このため、VBA マクロからの処理においても、Office アプリケーションの動作変化の影響を受けます。

例えば VBA マクロで Workbooks.Open を実行すると、Excel アプリケーションに対し「ファイルを開く」という要求を行い、実際にファイルを開く処理を行うのは VBA コード自身ではなく、Excel アプリケーション側です。そして、「ファイルを開く」という動作の中には、実際のファイル内容の読み取りの他、様々な内部処理が存在します。例えば、ファイルのフォーマットチェック、セキュリティ設定によるファイル内要素のブロック要否のチェック、最近使ったファイルへの情報追加・・・など、多岐に渡る内部処理をまとめて Workbooks.Open により実行される「ファイルを開く」動作となります。

ここまでに述べた通り、新しいバージョンの Office でも、Workbooks.Open メソッド自体はこれまでと同じ用法で実行することはできます。ただ、例えば Workbooks.Open から実行するフォーマットチェック項目が強化される、といった Excel 側の動作変化はあり得ます。
先述の例の場合、新しいチェック項目に反するフォーマットのファイルを VBA マクロから開くと、以前のバージョンでは開けるが、新しいバージョンでは開けない、といった事象が発生する可能性があります。

このような Office アプリケーションの動作変化は、バージョン更新に伴って無数に存在し、かつ内部の細かな実装であるため、すべての変更点を網羅して一覧化することはできません。リリース ノートで主要な変更の概要は確認できますが、記載のない細かな変更もあり、また、リリース ノートの端的な記載から影響有無を判断することは難しいことがほとんどです。
また一方、ユーザーが作成する VBA マクロの処理内容も千差万別であり、どの Office 動作変化が VBA マクロの処理に影響するかを弊社で事前に推測し、「VBA に影響が出る変更リスト」のような形でまとめることも困難です。

したがって、VBA マクロが新しい Office バージョンで確実に動作するかは、実際に新しい環境での動作検証を通してご確認ください。

なお、このように記載しましたが、もちろん、広く一般的に想定される状況で、既存 VBA マクロの動作に影響するような変更は基本的には行いません。以下の公開情報でも触れている通り、ほとんどの VBA マクロはこれまでと同じように動作するため、過度に心配する必要はありません。

Microsoft 365 Appsをデプロイするための環境と要件を評価する
手順 4 - アプリケーション互換性の評価
https://learn.microsoft.com/ja-jp/deployoffice/assess-microsoft-365-apps

社内環境の Office バージョンアップなどに際しては、VBA マクロを含むファイルは非常に多く存在することが一般的かと思います。そして、このようなファイルすべてを事前検証することは現実的ではないことが多いと考えられます。
例えば、業務上重要なファイルのみ事前検証を行い、その他のファイルは新バージョンの利用開始後に問題が確認された時点で、弊社サポートへのお問い合わせなどを通して調査するなど、皆様のご事情に合わせて、互換性に関する対応方針をご検討いただければ幸いです。

付録 1: Office 動作変化の具体例


<3. Office アプリケーションの動作変化> について、Office の動作変化の具体例を紹介します。

OneDrive 同期フォルダーの Workbook.Path
エクスプローラーで OneDrive や SharePoint ライブラリの同期フォルダからファイルを開く場合、以前の Office バージョンでは、ThisWorkbook.Path などで開いたファイルのパスを取得すると、同期フォルダのローカル パスが返されました。
Microsoft 365 の最新チャネル バージョン 1903 および半期チャネル バージョン 2008 以降、および Office LTSC 2021 では、このとき、クラウド ストレージ側の URL パスが返るようになりました。

この変化により、ローカル パスが返ることを期待して後続処理 (例: ”¥” 文字でのパス分割など) を記載していると影響が生じます。

Excel 表示形式の和暦元年対応
Office 2019 までは、Excel のセルの表示形式において、和暦の元年表記に未対応だったため、「令和1年5月1日」のように表示されていました。
Microsoft 365 のバージョン 1909 以降や Office LTSC 2021 では、元年表記に対応するとともに、既定で元年表記が有効となっています。

この変化により、新しいバージョンでは、セルに「令和1年5月1日」のような和暦文字列を設定すると「令和元年5月1日」と表示内容が変わります。

付録 2: bit 変更の影響


Office のバージョンアップと合わせて、32 bit から 64 bit に変更することも多いかと思います。bit 変更に伴う VBA マクロへの影響として主に注意する点は、以下の 2 点です。

  • Office 以外のライブラリを利用している場合、64 bit ライブラリを実行環境にインストール済みか
  • Declare ステートメントを利用している場合、PtrSafe の付与と、パラメーターの Long 型を適切に LongPtr 型に変更しているか (パラメーターの値を扱う変数のデータ型も合わせて変更が必要)

詳しくは、以下の公開情報をご参照ください。

64 ビット版または 32 ビット版の Office を選択する
https://support.office.com/ja-jp/article/2dee7807-8f95-4d0c-b5fe-6c6f49b8d261

64 ビット Visual Basic for Applications の概要
https://learn.microsoft.com/ja-jp/office/vba/language/concepts/getting-started/64-bit-visual-basic-for-applications-overview


今回の投稿は以上です。

本情報の内容 (添付文書、リンク先などを含む) は、作成日時点でのものであり、予告なく変更される場合があります。