WMI(Windows Management Instrumentation)を利用して、VBAからTCP/IPネットワークインターフェイスのパフォーマンスを監視するサンプルコードと使い方を解説します。
この記事で何ができるか
外部の専門ツールをインストールすることなく、VBA(Excelなど)からWindowsのWMIクラス(Win32_PerfFormattedData_TCPIP_NetworkInterface)にアクセスし、ネットワークの送受信バイト数やパケット数をリアルタイムにモニタリングできます。
前提条件・参照設定
- 動作環境: Windows 10 / 11 (VBA7 64bit/32bit環境対応)
- VBEの「ツール」>「参照設定」から
Microsoft WMI Scripting V1.2 Libraryにチェックを入れてください(または遅延バインディングを利用)。
VBAサンプルコード
以下のコードを標準モジュールに貼り付けて実行してください。イミディエイトウィンドウにネットワークのパフォーマンス情報が出力されます。
Option Explicit
#If VBA7 And Win64 Then
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#Else
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If
Sub TCPIPネットワークインターフェイスのパフォーマンスを監視する()
' 前提: Microsoft WMI Scripting V1.2 Library を参照設定してください。
Dim colItems As SWbemObjectSet
Dim objItem As SWbemObjectEx
Dim oLocator As SWbemLocator
Dim objWMIService As SWbemServices
Set oLocator = New WbemScripting.SWbemLocator
Set objWMIService = oLocator.ConnectServer
Dim objRefresher As New WbemScripting.SWbemRefresher
Set colItems = objRefresher.AddEnum _
(objWMIService, "Win32_PerfFormattedData_TCPIP_NetworkInterface").ObjectSet
objRefresher.Refresh
Dim i As Integer
For i = 1 To 10
For Each objItem In colItems
Debug.Print "Bytes Received Per Second: " & objItem.BytesReceivedPersec
Debug.Print "Bytes Sent Per Second: " & objItem.BytesSentPersec
Debug.Print "Bytes Total Per Second: " & objItem.BytesTotalPersec
Debug.Print "Caption: " & objItem.Caption
Debug.Print "Name: " & objItem.Name
Debug.Print "Packets Per Second: " & objItem.PacketsPersec
Debug.Print "-----------------------------------"
objRefresher.Refresh
Sleep 2000
DoEvents
Next
Next
End Sub
使い方と注意点
For i = 1 To 10 のループ回数や Sleep 2000 のインターフェイス更新間隔は必要に応じて調整してください。大量のプロパティをイミディエイトに出力しているため、必要に応じて確認したい項目(受信・送信バイト数など)だけを抽出して活用してください。
この記事の更新履歴
この記事は、生成AIを活用した自動レビュー・更新フローにより内容を見直し、必要な修正を反映しています。
2026年9月26日
- 変更コードブロックが通常の引用タグになっていた表示崩れを修正し、VBAコードとして正しく表示されるように整えました。
- 追加記事の目的や参照設定、実行手順などの前提条件を解説するセクションを追加しました。

