'OSのバージョンの数値を返す win10=10 win11=11 Function GetOsVersion() ' 取得結果を格納する変数を宣言 Dim lnArchitecture As Long Dim strCaption As String Dim strCSDVersion As String Dim strOSVersion As String ' 初期値を入れておく lnArchitecture = 32 strCaption = "" strCSDVersion = "Service Pack 0" On Error Resume Next Dim objOS As Object Dim i As Long ' Connect to WMI and obtain instances of Win32_OperatingSystem For Each objOS In GetObject("winmgmts:").InstancesOf("Win32_OperatingSystem") ' アーキテクチャの取得 On Error GoTo OSArchitectureNoSupport If InStr(1, CStr(objOS.OSArchitecture), "64", vbBinaryCompare) <> 0 Then lnArchitecture = 64 End If OSArchitectureNoSupport: On Error Resume Next ' キャプションを取得 For i = 1 To Len(objOS.Caption) Dim strTemp As String: strTemp = Strings.Mid$(objOS.Caption, i, 1) If AscW(strTemp) = &H2122 Then strCaption = strCaption & " TM" ElseIf AscW(strTemp) = &H24C7 Or AscW(strTemp) = &HAE Then strCaption = strCaption & "(R)" Else strCaption = strCaption & strTemp End If Next i ' SPを取得 strCSDVersion = objOS.CSDVersion ' Versionを取得 strOSVersion = objOS.Versionn Next GetOsVersion = FirstVal(strCaption) Set objOS = Nothing End Function '文字列の中から最初に見つかった数値をval()で変換して返す Function FirstVal(str As String) As Integer Dim buf As String, RE, reMatch, reValue Set RE = CreateObject("VBScript.RegExp") buf = str With RE .Pattern = "\d+" .Global = True Set reMatch = .Execute(buf) If reMatch.count > 0 Then For Each reValue In reMatch FirstVal = Val(reValue) Exit For Next reValue End If End With Set RE = Nothing End Function