Excel VBAで簡単ネットワーク診断:Pingを使った基本的な接続チェック方法とIPアドレス・ホームページ・サーバーへのPingテストを手軽に実行する方法!(テクニック)
Excel VBAで簡単ネットワーク診断:Pingを使った基本的な接続チェック方法とIPアドレス・ホームページ・サーバーへのPingテストを手軽に実行する方法!(テクニック)
Excel VBAを用いたネットワーク診断の自動化は、日常の業務において非常に便利なツールとなり得ます。特に、ネットワークの状態を迅速にチェックしたいIT管理者や、簡単なトラブルシューティングツールを求めているユーザーにとっては、このようなスクリプトが大いに役立ちます。本記事では、Excel内でVBAコードを使用して特定のIPアドレスへPingを送信し、その結果をユーザーに通知する方法を紹介します。これにより、日常の業務におけるネットワークトラブルシューティングを段階的に、かつ効率的に行うことができます。
日常業務への応用
下記のVBAプログラムは日常の業務に応用することで、次のようなメリットが得られます。
- 迅速なネットワーク診断: ネットワークの問題を素早く特定し、対処することができます。
- 生産性の向上: 手動でのトラブルシューティング手順を自動化することで、時間を節約し、他の作業に集中できます。
- 教育ツールとしての活用: ネットワークの基本的な概念やトラブルシューティングの方法を理解するための実践的なツールとして利用できます。
●【下記のVBAプログラムに関連するMicrosoft公式ドキュメントは以下の通りです。】
・Win32_PingStatusクラス: Ping操作の結果に関する情報を含む、Win32_PingStatusクラスの公式ドキュメントです。
https://learn.microsoft.com/en-us/previous-versions/windows/desktop/wmipicmp/win32-pingstatus
EXCEL VBAで実現するPingコマンド:IPアドレス入力で接続状態を即時チェック
今回説明するプログラムは、Pingの通信状態を調べるプログラムです。ネットワーク接続やサーバーの可用性は、日々の業務や情報技術の世界で非常に重要な要素です。特に、リモートで作業する際や、特定のサービスへの接続が必要な場合、その状態を迅速に把握することが求められます。ここで紹介するプログラムは、そのような状況において非常に役立ちます。このプログラムを使用することで、指定されたIPアドレスへのPingテストを実行し、その通信状態を確認することができます。ユーザーは簡単にIPアドレスを入力し、その結果を即座に確認できるようになります。このコードは、IT管理者やネットワーク技術者にとって貴重なツールとなりえます。それでは、順番に説明いたします。
【プログラムの流れ】
1.ユーザーに対してInputBoxを使用してIPアドレスの入力を求めます。
2.入力がない場合、処理を終了します。
3.WbemScripting.SWbemLocatorオブジェクトを作成し、ローカルPCにWMI経由で接続します。
4.Win32_PingStatusクエリを使用して、入力されたIPアドレスに対するPingテストを実行します。
5.Pingテストの結果をイテレーションし、各結果に対してステータスコードを確認します。
6.ステータスコードに基づいて、Pingの成功、タイムアウト、到達不可、その他の失敗を示すメッセージボックスを表示します。
7.使用したオブジェクトを解放します。
【プログラム実行条件・注意事項】
1.このスクリプトはWindows Management Instrumentation (WMI) を使用しています。そのため、WMIが有効になっているWindowsシステムでのみ動作します。
2.IPアドレスが正しく入力されていることを確認してください。不正な形式のIPアドレスは処理できません。
3.ネットワークの状態やファイアウォールの設定によっては、Pingテストが正常に実行されない場合があります。
★【サンプルプログラム】
下記のリンク先よりサンプルプログラムをダウンロードする事ができます。
● ping01(サンプルプログラム)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
' ' Sub PingPC01() ' 複数のオブジェクト変数を宣言 Dim objLocator As Object, objServer As Object, objPingSet As Object, ping As Object ' IPアドレスを格納する変数を宣言 Dim ipAddress As String ' IPアドレスの入力をユーザーに促す ipAddress = InputBox("IPアドレスを入力してください(例:192.168.1.1)", "IPアドレス入力") ' 入力がない場合は処理を終了 If ipAddress = "" Then Exit Sub ' SWbemLocatorオブジェクトの作成 Set objLocator = CreateObject("WbemScripting.SWbemLocator") ' WMIを使用してローカルPCに接続 Set objServer = objLocator.ConnectServer() ' Win32_PingStatusを使用してPing実行 Set objPingSet = objServer.ExecQuery("Select * From Win32_PingStatus Where Address = '" & ipAddress & "'") ' Pingの結果をイテレーション For Each ping In objPingSet ' StatusCodeに基づく結果の表示 If ping.StatusCode = 0 Then MsgBox "Ping成功" ElseIf ping.StatusCode = 11010 Then MsgBox "Ping失敗【タイムアウト】" ElseIf ping.StatusCode = 11003 Then MsgBox "Ping失敗【到達不可】" Else MsgBox "Ping失敗" End If Next ' オブジェクトの解放 Set objLocator = Nothing Set objServer = Nothing Set objPingSet = Nothing ' End Sub ' ' |
(画面クリックして拡大)
EXCEL VBAで学ぶ: ネットワーク監視を自動化するPingテストスクリプトの作成方法・複数IPアドレスへのPingテスト自動化!
下記のサンプルプログラムは、サンプルプログラム①の応用になります。このプログラムは、Excelワークシート上で指定された複数のIPアドレスに対してPingテストを実行し、結果を記録する自動化スクリプトです。ワークシートのB列にリスト化されたIPアドレスを読み取り、各アドレスに対してPing応答をテストします。応答状況に基づいて、”Ping成功”、”Ping失敗【タイムアウト】”、”Ping失敗【到達不可】”などの結果をC列に記録します。このスクリプトは、ネットワークの状態監視やトラブルシューティングに役立ち、繰り返しの手作業を削減することで効率を向上させます。それでは、順番に説明いたします。
【プログラムの流れ】
1.必要なオブジェクト変数を宣言します。
2.1番目のワークシートを作業対象として設定します。
3.最終行をB列の内容から取得します。
4.C列の既存の内容をクリアします。
5.SWbemLocatorオブジェクトを作成してWMIに接続します。
6.2行目から最終行まで、B列からIPアドレスを読み取ります。
7.読み取ったIPアドレスにPingを実行し、結果を取得します。
8.Pingの結果に応じて、”Ping成功”、”Ping失敗【タイムアウト】”、”Ping失敗【到達不可】”、または”Ping失敗”をC列に記録します。
9.全ての行に対してPingテストを完了した後、使用したオブジェクトを解放します。
10.完了メッセージボックスを表示します。
【プログラム実行条件・注意事項】
1.このスクリプトを実行する際は、現在開いているワークシートが正しいデータを含んでいること、そして、正しいワークシートがターゲットとなっていることを確認してください。
2.大量のIPアドレスに対してPingテストを行う場合、処理に時間がかかることがあります。そのため、ユーザーは処理の完了を待つ必要があります。
3.コードの実行中にExcelを操作しないように注意してください。これは、処理中のデータの誤った入力や変更を防ぐためです。
4.ネットワークのセキュリティポリシーによっては、Pingコマンドが制限されている場合があります。そのような環境では、このスクリプトは期待通りに動作しない可能性があります。
★【サンプルプログラム】
下記のリンク先よりサンプルプログラムをダウンロードする事ができます。
● ping02(サンプルプログラム)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
’ ’ Sub PingPCs02() ' 必要なオブジェクト変数を宣言 Dim objLocator As Object, objServer As Object, objPingSet As Object, ping As Object Dim ws As Worksheet Dim lastRow As Long, r As Long Dim ipAddress As String Dim result As String ' ワークシートオブジェクトの設定 Set ws = ThisWorkbook.Sheets(1) ' 1番目のワークシートを使用。必要に応じて変更してください。 ' 最終行を取得 lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row ' C列の結果を削除 ws.Range("C2:C" & lastRow + 2).ClearContents ' SWbemLocatorオブジェクトの作成 Set objLocator = CreateObject("WbemScripting.SWbemLocator") ' WMIを使用してローカルPCに接続 Set objServer = objLocator.ConnectServer() ' 2行目から最終行まで繰り返し For r = 2 To lastRow ' B列からIPアドレスを取得 ipAddress = ws.Cells(r, "B").Value ' Ping実行 Set objPingSet = objServer.ExecQuery("Select * From Win32_PingStatus Where Address = '" & ipAddress & "'") ' Pingの結果を評価 For Each ping In objPingSet If ping.StatusCode = 0 Then result = "Ping成功" ElseIf ping.StatusCode = 11010 Then result = "Ping失敗【タイムアウト】" ElseIf ping.StatusCode = 11003 Then result = "Ping失敗【到達不可】" Else result = "Ping失敗" End If ' 結果をC列に記録 ws.Cells(r, "C").Value = result Next ping Next r ' オブジェクトの解放 Set objLocator = Nothing Set objServer = Nothing Set objPingSet = Nothing MsgBox "Ping判定が完了しました。", vbInformation End Sub ’ ’ |
(画面クリックして拡大)
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。