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

SEからWebエンジニアへ転職した理由

侍エンジニア塾卒業生の小池さんは、以前は社内SEとして約5年ほど勤務していました。しかし業務内容は社内のヘルプデスク対応など、プログラムを書く仕事は全くなかったそうです。

SEながらプログラムを書けない現状に「将来仕事がなくなるんじゃないか」と不安を感じ、プログラミング学習を決意。

弊社スクールで学習し、無事ベンチャー企業のプログラマーとして転職に成功しました。そんな小池さんの学習法や転職体験談を伺いましたので、是非ご覧ください。

「プログラミングができないSEは仕事がなくなる」不安を感じたSEが未経験から転職成功するまで
更新日 : 2019年10月7日

書いた人

Sanshiro Wakizaka

Sanshiro Wakizaka

フリーランスエンジニア兼ライターのワキザカ サンシロウです。
ExcelVBAの自動化ツール開発、WEB開発をメインにエンジニア業務をこなしつつ、サムライエンジニアにてライター業務をしております。

プログラミングをこれからやってみたい方に向けて、ためになる記事を全力で書いていきますので宜しくお願い致します!

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説