VBAとWMIでリモートPCのシステム構成情報を取得する

VBA・Officeカテゴリを表すパンダのイラスト VBA・Office

VBAからWMI(Windows Management Instrumentation)を利用すると、ネットワーク上のリモートPCからOS名、コンピューター名、プロセッサ情報、メモリ容量などのシステム構成情報をプログラム経由で取得できます。社内PCの簡易インベントリ作成や資産管理の自動化に活用できます。

事前準備と前提条件

リモートPCのWMI情報を取得するには、以下の条件を満たしている必要があります。

  • 管理者権限: 実行元のアカウントが対象リモートPCの管理者権限(Administrator権限)を保持していること。
  • ネットワーク疎通とファイアウォール: リモートPC側で「Windows Management Instrumentation (WMI)」および RPC 関連の通信ポート(TCP 135、動的RPCポート)が許可されていること。
  • ネットワーク環境: 同一ドメイン環境、または適切な認証設定がなされたワークグループ環境であること。

VBAサンプルコード

以下は、指定したPC名(またはIPアドレス)に対してWMI接続を行い、コンピューター名・OS名・物理メモリサイズを取得するVBAコード例です。

Sub GetRemoteSystemInfo()
    Dim strComputer As String
    Dim objWMIService As Object
    Dim colItems As Object
    Dim objItem As Object
    
    ' 対象端末のホスト名またはIPアドレス(ローカルの場合は ".")
    strComputer = "REMOTE-PC-01"
    
    On Error Resume Next
    ' WMIサービスへの接続
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    
    If Err.Number <> 0 Then
        MsgBox "リモートPCへの接続に失敗しました: " & Err.Description, vbCritical, "接続エラー"
        Err.Clear
        Exit Sub
    End If
    On Error GoTo 0
    
    ' OS情報の取得 (Win32_OperatingSystem)
    Set colItems = objWMIService.ExecQuery("SELECT Caption, CSName, TotalVisibleMemorySize FROM Win32_OperatingSystem")
    
    For Each objItem In colItems
        Debug.Print "コンピューター名: " & objItem.CSName
        Debug.Print "OS名: " & objItem.Caption
        Debug.Print "可視物理メモリ: " & Round(objItem.TotalVisibleMemorySize / 1024 / 1024, 2) & " GB"
    Next
    
    ' メモリ・システム情報の取得 (Win32_ComputerSystem)
    Set colItems = objWMIService.ExecQuery("SELECT Model, Manufacturer, TotalPhysicalMemory FROM Win32_ComputerSystem")
    
    For Each objItem In colItems
        Debug.Print "メーカー: " & objItem.Manufacturer
        Debug.Print "モデル: " & objItem.Model
        If Not IsNull(objItem.TotalPhysicalMemory) Then
            Debug.Print "物理メモリ総量: " & Round(CDbl(objItem.TotalPhysicalMemory) / 1024 / 1024 / 1024, 2) & " GB"
        End If
    Next
    
    ' 後始末
    Set colItems = Nothing
    Set objWMIService = Nothing
End Sub

安全に検証する順序

  1. まずは strComputer = "."(ローカルPC)で実行し、正常に情報が取得できるか試します。
  2. 次に管理下の検証用リモートPC1台を対象に設定し、接続を確認します。
  3. 「RPC サーバーを利用できません」等のエラーが出た場合は、リモートPCのファイアウォール設定(WMIの受信許可)や管理者権限を確認します。
  4. 複数端末へ展開する場合は、エラー処理を組み込んでループ処理を行います。

主なWMIクラスと取得可能項目

  • Win32_OperatingSystem: OSバージョン、ビルド番号、インストール日時、最終起動時間
  • Win32_ComputerSystem: ドメイン名、製造元、モデル名、全物理メモリ
  • Win32_Processor: CPU名称、コア数、論理プロセッサ数
  • Win32_LogicalDisk: ディスクドライブの容量、空き領域(DriveType = 3 でローカルディスクを指定)

公式情報

この記事の更新履歴

  • 2026-09-20 更新: VBAからWMIを利用してリモートPCのシステム構成情報を取得するサンプルコード、事前条件、主要なWMIクラスの解説を追加しました。
  • 2026-09-14 更新: リモート接続時の権限・通信条件と段階的な確認手順を追加しました。

この記事の更新履歴

この記事は、生成AIを活用した自動レビュー・更新フローにより内容を見直し、必要な修正を反映しています。

2026年9月20日

  • 追加WMI経由でリモートPCからOS名やメモリ容量を取得するVBAサンプルコードとエラー処理を追加しました。
  • 追加リモート接続に必要な前提条件(管理者権限・ファイアウォール・RPC設定)および主要なWMIクラスの解説を追加しました。

文書情報

記事タイトル
VBAとWMIでリモートPCのシステム構成情報を取得する
作成日
更新日
Source URL
https://papanda925.com/?p=6330

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

タイトルとURLをコピーしました