不特定多数の人が使用するようなマクロでは、そのマクロが実行される環境を配慮する必要があります。たとえば、Excelのバージョンによっては使用できないコマンドがあったり、引数が変更されていることもあります。マクロを実行しようとしているExcel(そのブックを開いているExcel)のバージョンを調べるには、ApplicationオブジェクトのVersionプロパティを使います。次のコードは、Excelのバージョンを表示します。
Sub Sample1()
MsgBox Application.Version
End Sub

Versionプロパティの返り値は次のようになります。
| Excelの種類 | Versionプロパティ |
|---|---|
| Excel 2007 | 12.0 |
| Excel 2003 | 11.0 |
| Excel 2002 | 10.0 |
| Excel 2000 | 9.0 |
| Excel 97 | 8.0 |
| Excel 95 | 7.0 |
| Excel 5.0 | 5.0 |
Excel 2007はベータ版で確認しましたが、まず間違いないでしょう。
また、Versionプロパティの返り値は文字列ですので留意してください。たまに下記のようなコードを見ます。
Sub Sample2()
If Application.Version > 10 Then
MsgBox "OK"
Else
MsgBox "NG"
End If
End Sub
このとき「本来Versionプロパティの返り値は文字列なのだけど、VBAは型キャストを自動的にやってくれるので、手を抜いて文字列と数値で比較させちゃえ」と正確に認識していないのでしたら、次のように数値に変換してから比較することをお勧めします。こういうところで手を抜くと、Excelがバージョンアップしたときなどに『動かない..._| ̄|○』と慌てる原因になります。
Sub Sample2()
If CInt(Application.Version) > 10 Then
MsgBox "OK"
Else
MsgBox "NG"
End If
End Sub
さてさて、このようにVersionプロパティでExcelのバージョンを判定できるのですが、本稿のテーマは「OSのバージョンを調べる」でした。マクロによっては、Excelのバージョンだけでなく、OSの種類によっても動作が異なる場合があります。Windows XPでは動くけどWindows 98はエラーになる・・・というように。しかし残念ながらOSの種類を判定するコマンドはVBAにありません(※1)。APIで取得する方法もありますが、ここではWMI(Windows Management Instrumentation)を使った例をご紹介します。次のコードは、Windowsの種類とバージョン番号を表示します。
Sub Sample3()
Dim Locator, Service, OsSet, os, msg As String
Set Locator = CreateObject("WbemScripting.SWbemLocator")
Set Service = Locator.ConnectServer
Set OsSet = Service.ExecQuery("Select * From Win32_OperatingSystem")
For Each os In OsSet
msg = msg & os.Caption & vbCrLf
msg = msg & os.Version
Next os
MsgBox msg, vbInformation
Set Service = Nothing
Set OsSet = Nothing
Set Locator = Nothing
End Sub

(※1)追記
失礼しました。ありました。忘れてました・・・ApplicationオブジェクトのOperatingSystemプロパティで取得できます。こちらの方が、はるかに簡単でしたね。