VBAの互換性問題が起こる原因とは?具体的な対策・予防もまとめて解説!


VBAのツールが別のバージョンで動かなくなってしまった・・・
VBAの互換性問題を解決する方法は?何をすればいいの?
VBAの互換性問題が起きないように予防する方法はないかな?

VBAで自動化ツールを作って納品したときに、納品先のExcelバージョンが違う場合に起こるエラーが互換性問題です。互換性を意識せずにツールを作ってしまうと、大規模なテストや大幅な修正が必要になるケースがよくあります。

ただ、互換性を最初から意識してツールを作っている人は少ないのではないでしょうか。

こんにちは!フリーランスエンジニア兼テックライターの脇坂です。

この記事では、VBAの互換性問題で悩む方向けに、VBAの互換性問題の解決・予防方法を解説します。

互換性問題を事前に意識して開発できるようになると、新しいバージョンが出たときも対応しやすいため、覚えておくのがおすすめです!

この記事はこんな人のために書きました。

  • VBAで1つでもツールを作ったことがある方
  • VBAのツール納品時に互換性問題で苦労したことがある方
目次

VBAの互換性問題が起こる原因

まず、VBAの互換性問題が起こる原因について解説します。

VBAで互換性問題が起こる原因は、大きく分けて以下の2つです。

  • Excelのバージョンの違い
  • Windowsのバージョンの違い

Excelのバージョンが違うことにより、使える機能、関数、参照設定の有無によってツールが動かないケースはよくあります。事前に動作を確認できていれば問題ありませんが、ツールのテストが終盤に差し掛かった時に互換性問題でツールが動かなくなると、事故にもつながってしまいます。

また、Windowsのバージョンの違いによって動かなくなるケースもあります。WindowsAPIを使った処理を使う場合は要注意ですね。

VBAの互換性問題が起こった時の対処方法

VBAの互換性問題が起こるとツールが動かなくなってしまうため、原因を探すのが難しいと感じる方も多いのではないでしょうか。

そんな方向けに、VBAの互換性問題が起こった時の対処方法について解説します。

VBAの互換性問題を対処するためには、エラーが起こっている原因を調べないといけません。エラーの原因を調べる方法は大きくわけて次の3つあります。

  • エラーメッセージから特定する
  • 使っている機能から特定する
  • 機能を分割してテストを行う

それぞれ詳しく解説しますね。

エラー情報を使って調べる

まず、エラー情報を使って調べる方法についてです。互換性問題に限らず、エラーが起こった時に対処する方法ですね。

たとえば、エラーになると次のようなメッセージが表示されます。


エラーの例

これは互換性のエラーではないですが、エラーメッセージ、エラー番号などが表示されていますよね。

「VBA エラーメッセージ」で調べるだけでなく「VBA エラー エラー番号」のように、エラー番号もいれて調べるのがおすすめです。まずは、エラーが起きてる原因がエラー情報から読み取れないか?を調べるのです。

エラーが出る例、出たときの具体的な対処方法のサンプルとして、以下記事がおすすめです。直接的に関係ないかもしれませんが、エラーの調べ方を含めて解説しているため、新しい発見があると思います!

【VBA入門】「実行時エラー ‘1004’」のエラー原因と対処方法とは
更新日:2024年4月29日

使っている機能が旧バージョンにもあるか確認

エラー情報からエラーの原因が特定できればOKですが、特定できないときもあります。そんなときは、Excelの機能の違いから調べることがおすすめです。

「Excel 2007 2010 機能 違い」「Excel 2010 2013 機能 違い」 など、実際に動かすバージョンと作ったExcelのバージョンをの違いをExcelの機能レベルで調べる方法です。たとえば、Excelのリボンの機能は、Excel2007から始めて導入されています。そのため、Excel2007よりも前のバージョンで、リボンを使ったVBAを組んだツールを動かそうとしても動きません。

また、Excelの機能だけでなく、「参照設定」が旧バージョンで存在しないケースもよくあります。VBEから参照設定を確認し、エラーになっている箇所がないか確認するのもおすすめです。詳細は以下に書いてあります。

【ExcelVBA入門】参照設定を設定・確認・解除する方法を徹底解説!
更新日:2024年4月29日

このように、Excelの新しい機能を使っている処理がないか、立ち止まって調べてみるのがおすすめです!

機能を分割してテストを行う

ただ、エラー情報からもわからず、最新の機能を使っているかもよくわからない・・・という場合もありますよね。そんなときは、機能を分割してテストを行うことがおすすめです。

たとえば、次のような、CSVファイルのデータを使って、PDFの資料を作成するツールがあったとします。

  1. CSVファイルを選択する
  2. CSVデータを取り込む
  3. 取り込んだデータをもとに、PDFの資料を作成する
  4. 作成したPDFのデータの出力フラグを「済」に変更する

この場合は、1 ~ 4までの細かい処理をごとに、互換性問題が起きないか確認していくイメージです。ブレークポイントをてけてデバッグをしながら、具体的にエラーが起きている箇所を調べていく作業ですね。

細かい単位で処理を確認したいときはとくに、デバッグがとても便利です。デバッグのやり方については以下で詳しく解説しているので、見てみてくださいね!

【ExcelVBA入門】VBAでデバッグするための方法とは?
更新日:2024年4月29日

VBAの互換性問題を起こさないための予防策

次に、VBAの互換性問題を起こさないための予防策について解説します。

使用するバージョンを確認する

まず、ツールを使うExcelのバージョンを確認しましょう。

Excelのバージョンがわかれば、事前に使用できない機能、関数などが調べやすくなりますよね。また、機能や関数だけでなく、参照設定を使う時は、事前に他のバージョンで動くか簡単なテストをしておくことで、ツール作成後に動かないという状況を避けることができます。

少なくとも、Excelのバージョン、Windowsのバージョンは確認しておきましょう。


【チェックポイント】

  • Excelのバージョン、Windowsのバージョンを確認する
  • 新機能、関数、参照設定を使う時は、対象バージョンで動くか確認する

可能な限り参照設定を使わない

対象のバージョンが「Excel2003 ~ 最新のExcelバージョンまで」のように広い場合、極力参照設定を使わないのがおすすめです。

参照設定を使うとき、使わないときのイメージは次のとおりです。

'■参照設定を使う時のイメージ
Dim obj1 As XXXX
Set obj1 = New XXXX

'■参照設定を使わないイメージ
Dim obj2 As Object
Set obj2 = CreateObject("XXXX")

参照設定を使わなくても、CreateObjectを使えば同じ処理を作ることができます。開発効率は少し下がりますが、テストにかける時間が大幅に減るため、バージョンの幅が広い時はおすすめです。

まとめ

今回は、VBAの互換性問題を解決する方法・具体的な予防策について解説しました。

バージョンが違うExcelでツールを動かすケースはよくあります。互換性問題が起こる原因、解決策、予防策を知っておくだけで、対策はしやすくなるのではないでしょうか。

ぜひ、VBAの互換性問題に強くなって下さいね!

この記事を書いた人

北海道出身の30歳で、フリーランスエンジニア兼テックライターとして活動中。新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。

Webアプリ、業務アプリ開発において、要件定義 ~ 運用保守まで様々な経験あり。また3歳の娘がいる1児のパパで、日々娘との時間を確保するために仕事を頑張っています!
侍エンジニアでは、【誰でもわかるレベルのわかりやすさ】を意識して、記事を執筆中。

目次