目次
はじめに
作成した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
など)を参照するのが最も手軽。
これらの情報をマクロのログファイルに記録しておけば、ユーザーから問い合わせがあった際に、どのような環境で問題が発生したのかを正確に把握でき、スムーズなサポートに繋がります。