ラピードアクト株式会社

技術記事:ExcelVBAで仕事を効率化しようVol.24

みなさん、こんにちは。
ITソリューション事業部の林です。

本記事では、ExcelVBAのテクニックを紹介・解説いたします。

今回の記事では、前回の「Windowsコマンドの出力結果を取得」するマクロの機能を拡張したマクロを紹介します。

【目次】

  1. 想定する利用シーン
  2. マクロの構造
  3. マクロサンプル

それでは、始めましょう!

想定する利用シーン

前回の記事では、pingとtracertコマンドの出力結果をテキストファイルに保存し、
続いてExcelシートに取り込む、というマクロを紹介しました。

実際にインフラ構築現場で利用することを考えると、
「1つのコマンドごとに出力結果をテキストファイルに保存し、それを繰り返す」
というマクロが求められることがあります。

例えば、以下のような表に記載されたホストとの疎通確認を行う場合が挙げられます。
下記のホストはすべてパブリックDNSサーバーです。

ホストIPアドレス
GoogleDNS8.8.8.8
OpenDNS208.67.222.222
CloudflareDNS1.1.1.1
Quad9DNS9.9.9.9

これらに対しpingとtracertコマンドを投入し、出力結果を保存します。

マクロの構造

VBAマクロの動作としては、大きく分けて以下の3つです。
①batファイルを作成する
②batファイルを実行し、出力結果をファイル保存する
③Excelシートの表にあるホストすべてに対して①②を繰り返す

①②については、過去記事(№23)で紹介しています。
③はFor-Nextで繰り返し実行します。

マクロサンプル

Excelシートには、以下のようにホスト一覧の表を作成しておきます。
A列はホスト名、B列はIPアドレスです。
1行目は項目名、2行目以降にホスト名とIPアドレスを記入します

マクロのコードは以下になります。
ホスト名とIPアドレスは変数に記憶しておき、コマンドの引数や出力先ファイルとして利用します。

Sub ExcelVBA_024_001()
    Dim FileNum
    Dim RowCnt As Long
    Dim LastRow As Long
    Dim StrBatFilePath As String
    Dim StrHost As String
    Dim StrIP As String
    Dim StrOutFile As String
    
    LastRow = Cells(Rows.Count, 1).End(xlUp).Row '表の最終行を取得する
    For RowCnt = 2 To LastRow
        StrHost = Cells(RowCnt, 1).Value 'ホスト名を変数に記録
        StrIP = Cells(RowCnt, 2).Value 'IPアドレスを変数に記録
        FileNum = FreeFile 'ファイル番号を取得
        StrBatFilePath = ThisWorkbook.Path + "\Sample.bat" 'batファイルの保存先パスを指定
        StrOutFile = "C:\Users\Public\Documents\疎通確認_" + StrHost + ".txt" 'コマンド出力結果ファイルの保存先パスを指定
        'batファイルを作成する
        Open StrBatFilePath For Output As #FileNum   '書込モードでファイルを開く
        Print #FileNum, "echo 日時: %date% %time% > " + StrOutFile 'echoコマンドをファイルへ書き込み
        Print #FileNum, "ping " + StrIP + " >> " + StrOutFile  'pingコマンドをファイルへ書き込み
        Print #FileNum, "tracert " + StrIP + " >> " + StrOutFile 'tracertコマンドをファイルへ書き込み
        Close #FileNum 'ファイルを閉じる
        'batファイルを実行する
        Dim objWSH As Object
        Set objWSH = CreateObject("WScript.Shell")
        objWSH.Run StrBatFilePath, 1, True
    Next
    
    MsgBox "Finish.", vbInformation '処理終了メッセージ表示
    objWSH.Run "C:\Windows\explorer.exe ""C:\Users\Public\Documents""", 1, True '指定したフォルダを開く
End Sub

マクロの実行中はコマンドプロンプトの画面が開いたままになります。

マクロを実行すると、コマンドの出力結果ファイルが以下のようにフォルダに作成されます。

各ファイルにはコマンドの結果が保存されます。

以上、Windowsコマンドの結果を取得するマクロサンプルになります。

それでは、また次回お会いしましょう!