その他関連のテクニック

Windowsの種類を取得する

(Excel 97/2000/2002/2003/2007)
Excelのバージョンによって、VBAには違いがあります。
たとえば、文字列を分割するSplit関数はOffice 2000で追加されましたのでExcel 97やExcel 95では使用できません。
また、セルを検索するFindステートメントの引数SearchFormatは、Excel 2002で追加された引数ですので、Excel 2000のVBAで指定するとエラーになります。

異なるバージョンのExcelが混在するような環境では、マクロを実行する前にExcelのバージョンを調べる方が安全です。
Excelのバージョンは、ApplicationオブジェクトのVersionプロパティで取得できます。

Sub Sample1()
  MsgBox Application.Version
End Sub   
Versionプロパティは、次の文字列を返します。 Excel 2010 → 14.0 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 2010は「13.0」ではなく「14.0」です。 13は不吉な数字だからでしょうか、飛ばされてしまいました。 さて、Excelのバージョンに応じて動作を変更するには、ApplicationオブジェクトのVersionプロパティを調べればいいです。 では、Windowsの種類を判定するにはどうしたらいいでしょう。 それには、ApplicationオブジェクトのOperatingSystemプロパティを使います。 このプロパティは、今までほとんど出番がありませんでしたが、Windows XPだけでなく、Windows VistaやWindows 7が混在するようになってようやく日の目を見るようになりました。
Sub Sample2()
  MsgBox Application.OperatingSystem
End Sub
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 Windows 2000 → Windows (32-bit) NT 5.00 Windows Me → Windows (32-bit) 4.90 Windows 98 → Windows (32-bit) 4.10 Windows 95 → Windows (32-bit) 4.00 もちろん、64ビット版のWindowsなら「(64-bit)」となりますし、MacintoshのOSを判定することも可能です。 もっと正確に、Windowsの種類を判定するには、APIやWMIを使う手もあります。 ここでは、WMIで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
  Set Service = Nothing
  Set OsSet = Nothing
  Set Locator = Nothing
End Sub   
どんな結果が返るか、お使いのパソコンでご確認ください。