【VBA/マクロ】tracertコマンドを実行

ExcelのVBA(マクロ)で、tracertコマンドを実行する方法についてまとめました。

tracertコマンドを実行

Excel/VBAでは、WSH(Windows Scripting Host)を実行できます。
今回はこれを利用して「tracertコマンド」を実行してみます。

サンプルコード

サンプルプログラムのソースコードです。

Function tracert(j As Integer, ip As String)
    Dim WSH, wExec, cmd As String, Result As String
    Dim i As Integer
    i = 0
    
    Set WSH = CreateObject("WScript.Shell")
    
    ' 実行したいDOSコマンド
    cmd = "tracert " & ip
    
    ' DOSコマンドを実行
    Set exec = WSH.exec("%ComSpec% /c " & cmd)
    
    ' DOSコマンドが終了するまで待機
    Do While exec.Status = 0
        DoEvents
    Loop
    
    ' DOSコマンドの実行結果(標準出力)を取得
    Result = exec.StdOut.ReadAll
    
    ' 実行結果を行毎に区切る
    tmp = Split(Result, vbCrLf)
    
    For n = 0 To UBound(tmp)
        buf = tmp(n) & vbCrLf
        
        ' 時間が記載されている行だけセルに挿入
        If InStr(buf, "ms") Then
            Cells(i + 2, j) = buf
            i = i + 1
        End If
    Next n

    ' オブジェクトを空に
    Set wExec = Nothing
    Set WSH = Nothing
    
End Function


Sub test()
    Dim ip As String
    Dim j As Integer
    Dim jn As Integer
    
    ' 列の最大数(IPアドレスの数)を取得
    jn = Cells(1, 1).End(xlToRight).Column

    ' ipの数だけtracertコマンドを実行
    For j = 1 To jn Step 1
        ip = Cells(1, j).Value
        Call tracert(j, ip)
    Next j
    
End Sub

実行結果

サンプルプログラムの実行結果です。
「A1」「B1」…セルのipアドレスに対してtracertコマンドを実行していきます。
そして、ホップ毎の結果をipアドレスの下に記載していきます。

A B
1 192.168.100.1 192.168.100.1
2 1 3 ms 2 ms 3 ms [192.168.100.1] 1 3 ms 3 ms 3 ms [192.168.100.1]
関連記事
1 【Excel/VBA】マクロ入門
関連記事