現在でも、エクセル2003で開発したマクロを2007以降のバージョンのエクセルを使用して動かしている法人や個人の方はたくさんいらっしゃると思います。仕様変更などによって互換性がなくなったり、稀ではありますが、Windows Update 後に動作しなくなるような場合もあります。
スポンサーリンク
このような時は、都度修正を行っているのが現実ではないでしょうか?新バージョンに対応すると、既存のバージョンでは動かなくなったりすることもありますので、なおさら厄介であり面倒な話です。
では、このような時はどのように対応したらよいのでしょうか?どちらのバージョンでも動作するマクロに修正することができれば一番よいとはおもいますが、ここでは、エクセルのバージョンごとに処理を切り分ける方法を紹介します。
また、動作するOSによっても処理を切り替えたい場合もあるかもしれませんので、OS情報もあわせて取得しています。
サンプルコード
'
' エクセルのバージョン、ビルド番号、OS種類を
' 取得するサンプル
'
MsgBox "version = " & Application.Version & vbNewLine & _
"build = " & Application.Build & vbNewLine & _
"os = " & Application.OperatingSystem
結果は以下のようになりました。Windows7 32bit 、Excel 2013 での動作結果です。

ビルド番号までは使用することはあまりなさそうですが、バージョンとOS情報は使用する機会があるかもしれませんね。
下表に実用的なエクセルバージョンとOS情報を下表にまとめておきました。すべて32ビットとなっていますが、64ビットOSで動作させている場合は「64-bit」になります。Windows XP や Excel 2003 はサポートが切れてますから実用的ではないとの意見もあるかもしれませんが、現実的にはまだまだ現役選手です。
| エクセル | Application.Version |
|---|---|
| Excel 2013 | 15.0 |
| Excel 2010 | 14.0 |
| Excel 2007 | 12.0 |
| Excel 2003 | 11.0 |
| OS | Application.OperatingSystem |
|---|---|
| Windows 7 | WIndows (32-bit) NT 6.01 |
| Windows Vista | WIndows (32-bit) NT 6.00 |
| Windows XP | WIndows (32-bit) NT 5.01 |
Execl for Mac ではOS情報がどのように取得されるか手元に環境がありませんので試せていませんが、以下のサイトではMac上では “Mac” が文字列の一部に入っていることで Windows と Mac の処理の切り分けを行っていることが確認できました。
' MAC と Windows のどちらで動作しているか判定する
If Not Application.OperatingSystem Like "*Mac*" Then
' Is Windows.
Else
' Is a Mac
End If
参考
キングKAZU はいつまで現役としてやるのでしょうか。