• ベストアンサー

マクロでping送信

私が今行いたいことは、 ExcelにIPアドレスを複数入力し、ボタンひとつでコマンドプロンプトがExcelに入力した数だけ開き、pingを送信するというようなマクロを作りたいと思うのですがぜんぜんわかりません。 また、送信する回数も設定したいです。 もしコマンドプロンプトを起動したり出来なのであれば、コマンドプロンプトでpingを送信したときみたいなパケットロスや応答時間などが出るようなものを作りたいです。 もし、作り方がわかる方がいましたら教えてください。 よろしくお願いします。

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

  • ベストアンサー
  • ittochan
  • ベストアンサー率64% (2667/4137)
回答No.7

>しかし、無知なものでどこにどうゆうふうに >追加したらいいのかわかりません。 単純に書くとこんな感じ? Dim WshShell, oExec, inp Set WshShell = CreateObject("WScript.Shell") Set oExec = WshShell.Exec("cmd /c ping " & "-n " & Range("b2").Value & " -w " & Range("c2").Value & " " & Range("a2").Value) inp = "" Do While Not oExec.StdOut.AtEndOfStream inp = inp & oExec.StdOut.Read(1) Loop Do While oExec.Status = 0 Loop Set oExec = WshShell.Exec("cmd /c ping " & "-n " & Range("b3").Value & " -w " & Range("c3").Value & " " & Range("a3").Value) Do While Not oExec.StdOut.AtEndOfStream inp = inp & oExec.StdOut.Read(1) Loop Do While oExec.Status = 0 Loop Set oExec = WshShell.Exec("cmd /c ping " & "-n " & Range("b4").Value & " -w " & Range("c4").Value & " " & Range("a4").Value) Do While Not oExec.StdOut.AtEndOfStream inp = inp & oExec.StdOut.Read(1) Loop Range("d5").Value = inp ファイト( ・_・)ノ☆(*_ _)パシ

その他の回答 (6)

  • ittochan
  • ベストアンサー率64% (2667/4137)
回答No.6

cmd /c ping " & "-n " & Range("b2").Value & " -w " & Range("c2").Value & " " & Range("a3").Value cmd /c ping " & "-n " & Range("b2").Value & " -w " & Range("c2").Value & " " & Range("a4").Value cmd /c ping " & "-n " & Range("b2").Value & " -w " & Range("c2").Value & " " & Range("a5").Value を追加するのはどうでしょ? 回数、タイムアウトをそれぞれ設定するのであれば cmd /c ping " & "-n " & Range("b3").Value & " -w " & Range("c3").Value & " " & Range("a3").Value とかにすればよいのでは?

taws
質問者

補足

ありがとうございます。 しかし、無知なものでどこにどうゆうふうに追加したらいいのかわかりません。 よろしくおねがいします。

  • ittochan
  • ベストアンサー率64% (2667/4137)
回答No.5

>pingの結果をテキストに保存するようなのも >できますでしょうか? できますが、それじゃぁ面白くないです。 Dim WshShell, oExec, inp Set WshShell = CreateObject("WScript.Shell") Set oExec = WshShell.Exec("cmd /c ping " & "-n " & Range("b2").Value & " -w " & Range("c2").Value & " " & Range("a2").Value) inp = "" Do While Not oExec.StdOut.AtEndOfStream inp = inp & oExec.StdOut.Read(1) Loop Range("d3").Value = inp こういうのはどうでしょうか? セルD3に結果が表示されます。

taws
質問者

補足

またまたありがとうございます。 またまたお願いなのですが、 現状では1つのIPアドレスにしかPINGを送信できないのですが、A3、A4、A5にIPアドレスをいれて一気に送信することはできますか? 頼りっぱなしですいません。

  • ittochan
  • ベストアンサー率64% (2667/4137)
回答No.4

>このマクロに追加で「-w 50」というのも >いっしょに実行させたいです。 ('◇')ゞラジャ タイムアウトですね。 RetVal = Shell("cmd /k ping " & "-n " & Range("b2").Value & " -w " & Range("c2").Value & " " & Range("a2").Value, 1) こんな感じ C2にタイムアウト値ね

  • ittochan
  • ベストアンサー率64% (2667/4137)
回答No.3

>コマンドプロンプトが立ち上がるだけで >動きませんでした(>_<) 変ですね。 タイプミスの可能性は? コマンドプロンプトにはエラーは表示されていませんか?

taws
質問者

補足

もう一回やったらできました。 ありがとうございます。 また、無知な質問なのですがこのマクロに追加で「-w 50」というのもいっしょに実行させたいです。 あと、pingの結果をテキストに保存するようなのもできますでしょうか?

  • ittochan
  • ベストアンサー率64% (2667/4137)
回答No.2

windows2000やWindowsXPでしたら Dim RetVal RetVal = Shell("cmd /k ping " & "-n " & Range("b2").Value & " " & Range("a2").Value, 1) こんな感じ? セル A2はIPアドレス B2には回数 を入れときます

taws
質問者

補足

ありがとうございます。 実際にやってみたのですが、コマンドプロンプトが立ち上がるだけで動きませんでした(>_<)

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

ちょっと直接のお答えにはなっていなかもしれませんが、ExcelのマクロとかVBAとかすっかり忘れてしまったので、バッチファイルを使って同じようなことができないか試してみました。 ip.txt というファイルに、 192.168.1.1 192.168.1.2   :   : というIPアドレスの一覧が入っていたとして(テキストエディタで作っても、Excelで作ってテキストで保存してもいいと思いますが) これを一行ずつ読み込んで、それぞれのIPアドレスにpingを投げて、ログファイル(log.txt)に記述する、というバッチファイルを書いてみました。一応私の環境(Windows2000)では動きました。 ----------------------------------------------------- @echo off set LOGFILE=log.txt set IPFILE=ip.txt if exist %LOGFILE% del %LOGFILE% FOR /F %%i in (%IPFILE%) do ping %%i >> %LOGFILE% ----------------------------------------------------- もし参考になれば幸いです。

taws
質問者

補足

ありがとうございます。 うまくいきました。 これに加えてなのですが、pingを送信する回数とかも入れることができますでしょうか? よろしくお願いします。

関連するQ&A