• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル2010マクロ ping送信マクロ作成)

エクセル2010マクロ ping送信マクロ作成

このQ&Aのポイント
  • エクセル2010で、複数のIPアドレスに対してpingを送信し、正常とエラーを判別するマクロの作成方法を教えてください。
  • ネットで検索して見つけたマクロは、正常と受信=0の場合は正常と判定できるが、「宛先ホストに到達できません」というエラーも正常として判定してしまう問題があります。
  • マクロの概要は、D5~D89にIPアドレスを入力し、正常ならば対応した行のE列に「0」を、エラーがある場合はE列に「1」、F列に「エラー」と入力するものです。

質問者が選んだベストアンサー

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

部分的な完成形ですが、下記を読んでみてください。 コマンドプロンプトの標準出力を取得する http://www.moug.net/tech/exvba/0150123.html Result にコマンドの出力結果が格納されます。 これを、 If Instr(Result,"宛先ホストに到達できません")> 0 then のように調べれば良いでしょう。 こちら(Win7)で少し見た限りでは "が見つかりませんでした。ホスト名を確認してもう一度実行してください。" や "転送に失敗しました。一般エラーです。" などエラーメッセージの拾い出しを行う必要がありそうです。 また、WinXPではそっけない英文メッセージでしたが、Win7では日本語ですので Vistaの場合はどうなんでしょう。 もしかしたら日本語でも少し表現が異なっている場合も考えられます。 ・・・と考えましたが、疎通の確認だけならば 成功した場合には、"ラウンド トリップの概算時間(ミリ秒):"が含まれますので これを頼りに Sub ping送信マクロ弐()   Dim objWSH As Object, oEx As Object   Dim i As Integer   Dim sCmd As String   Dim sResult As String      Set objWSH = CreateObject("WScript.Shell")      For i = 5 To Cells(Rows.Count, 4).End(xlUp).Row     sCmd = "%ComSpec% /c ping -n 1 " & Cells(i, 4)     Set oEx = objWSH.Exec(sCmd)          Do While oEx.Status = 0       DoEvents     Loop     sResult = oEx.StdOut.ReadAll          If InStr(sResult, "ラウンド トリップの概算時間") = 0 Then       Cells(i, 5) = "1"       Cells(i, 6) = "エラー"     Else       Cells(i, 5) = "0"       Cells(i, 6) = ""     End If   Next      Set objWSH = Nothing End Sub 補足 "ラウンド トリップの概算時間(ミリ秒)" の半角括弧があると Instr関数がなぜか働かないので、 (ミリ秒) は削りました。 Ping は一回しか打ってません ping -n 1 なお、コマンドのウィンドウが出てきて煩わしいので、 下記のような方法もあります。 http://okwave.jp/qa/q2352463.html http://www.wmifun.net/sample/win32_pingstatus.html

aizawanaoki
質問者

お礼

ありがとうございます。 ”ラウンドトリップの概算時間”は盲点でした。 また、わざわざマクロも組んで頂いて感謝です。 無事理想のものができました! 誠にありがとうございました。

関連するQ&A

専門家に質問してみよう