【VBA】OSやExcelのバージョン情報を取得する方法(互換性対策)

目次

はじめに

作成したVBAマクロを他の人に使ってもらう際、相手のPC環境(OSがWindows 10か11か、Excelが32bit版か64bit版かなど)によって、マクロが意図通りに動作しないことがあります。

VBAを使えば、マクロを実行しているPCのOS情報や、Excel自体のバージョン情報を簡単に取得できます。これにより、環境に応じた処理の分岐や、トラブルシューティングのためのログ記録などが可能になり、より堅牢で親切なツールを作成することができます。

この記事では、VBAでOSとExcelのバージョン情報をそれぞれ取得するための、2つの異なる方法を解説します。


1. OSのバージョン情報を取得する方法 (WMI)

WindowsのOSに関する詳細な情報を取得するには、WMI (Windows Management Instrumentation) という仕組みを利用するのが最も強力です。VBAからは WbemScripting.SWbemLocator オブジェクトを通じてWMIにアクセスします。

サンプルコード

' WMIを使って、OSの情報を取得する
Sub GetOperatingSystemInfo()
    Dim wmiService As Object
    Dim osInfoSet As Object
    Dim os As Object
    
    ' WMIサービスに接続
    Set wmiService = GetObject("winmgmts:\\.\root\cimv2")
    
    ' Win32_OperatingSystemクラスから情報をクエリで取得
    Set osInfoSet = wmiService.ExecQuery("Select * From Win32_OperatingSystem")
    
    ' 取得した情報を表示
    For Each os In osInfoSet
        MsgBox "OS名: " & os.Caption & vbCrLf & _
               "バージョン: " & os.Version & vbCrLf & _
               "アーキテクチャ: " & os.OSArchitecture, _
               vbInformation, "OS情報"
    Next
End Sub

コードの解説

  • GetObject("winmgmts:...: WMIのサービスに接続するためのおまじないです。
  • ExecQuery("Select * From Win32_OperatingSystem"): WMIに対して、「OSに関する情報(Win32_OperatingSystemクラス)を全て取得してください」というクエリ(命令)を実行しています。
  • os.Caption, os.Version, os.OSArchitecture: クエリの結果として返されたオブジェクトから、OS名(例: Microsoft Windows 11 Pro)、バージョン番号、アーキテクチャ(例: 64 ビット)といったプロパティを個別に取得しています。

2. Excelのバージョン情報を取得する方法 (Applicationオブジェクト)

Excel自体のバージョン情報は、VBAの Application オブジェクトが持つプロパティから簡単に取得できます。

サンプルコード

' Applicationオブジェクトから、Excelのバージョン情報を取得する
Sub GetExcelInfo()
    With Application
        MsgBox "Excelバージョン: " & .Version & vbCrLf & _
               "ビルド番号: " & .Build & vbCrLf & _
               "OS情報 (Excelから見た): " & .OperatingSystem, _
               vbInformation, "Excel情報"
    End With
End Sub

コードの解説

  • .Version: Excelのバージョン番号を文字列で返します(例: 16.0 はExcel 2016以降)。
  • .Build: Excelの詳細なビルド番号を返します。
  • .OperatingSystem: Excelが認識しているOSの名前とバージョンを文字列で返します(例: Windows (64-bit) NT 10.00)。

まとめ

今回は、VBAでOSとExcelのバージョン情報を取得する方法を解説しました。

  • OSの詳細情報が必要な場合は、WMI を使って Win32_OperatingSystem から取得する。
  • Excelのバージョン情報だけであれば、Applicationオブジェクトのプロパティ(.Versionなど)を参照するのが最も手軽。

これらの情報をマクロのログファイルに記録しておけば、ユーザーから問い合わせがあった際に、どのような環境で問題が発生したのかを正確に把握でき、スムーズなサポートに繋がります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次