スライドショー

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’」のエラー原因と対処方法とは
更新日 : 2019年4月22日

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

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

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

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

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

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

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

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

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

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

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

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

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

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の互換性問題に強くなって下さいね!

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

Sanshiro Wakizaka

Sanshiro Wakizaka

新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。
Webアプリ、業務アプリ開発において、要件定義、設計、インフラ、製造、テスト、運用保守など、様々な経験あり。
また、侍ブログ編集部として、これまでに200記事以上の記事を執筆。
現在はフリーランスエンジニア兼テックライターとして活動中。