エクセルマクロとTeraTermマクロの連携


はじめに

最近、TeraTermの実行結果をテキストファイルに貼りつけ、エクセルに取り込むことが多いです。
地味に作業が手間ですので、エクセルVBAとTeraTermマクロを合体して自動化したメモになります。

概要

大まかな手順は以下になります。
①エクセルVBAでTeraTermマクロ(ttlファイル)を生成する。
②TeraTermマクロでは、ログファイル出力する。
③①をWSHで実行する。
④②をVBAで開く

実装(公開鍵方式でログインする場合の例です。)

Sub excl2ttlSample()

    'パラメータ情報
    '------------------------------
    Dim PATH As String  'TeraTermマクロパス
    Dim HOST As String  'ホスト
    Dim USER As String  'ログインユーザ
    Dim PASS As String  'ログインパスワード

    PATH = "C:\Users\hogehoge\ttpmacro.exe" 'ttpmacro.exeのフルパスになります。適宜変更して下さい。
    HOST = "aaa.bbb.ccc.ddd" 'ログインするホストのIPアドレスになります。適宜変更して下さい。AWSの場合はURLになることが多いかもしれません。
    USER = "fugafuga" 'ユーザ名は適宜指定して下さい。

    'ttlファイル作成
    '------------------------------
    Dim ttlPATH As String
    Dim FN As Integer

    ttlPATH = "C:\Users\hogehoge\Desktop\temp.ttl"  '生成するttlファイルを指定します。こちらも適宜。
    FN = FreeFile

    Open ttlPATH For Output As #FN

    Print #FN, "username = '" + USER + "'"
    Print #FN, "keyfile = '""C:\Users\hogehoge\Desktop\AWS\fugafuga.pem""'" 'pemファイルを適宜指定します。
    Print #FN, "hostname = '" + HOST + "'"
    Print #FN, "msg = hostname"
    Print #FN, "strconcat msg ':22 /ssh2 /auth=publickey /user='"
    Print #FN, "strconcat msg username"
    Print #FN, "strconcat msg ' /keyfile='"
    Print #FN, "strconcat msg keyfile"
    Print #FN, "connect msg"
    Print #FN, "logopen 'C:\Users\hogehoge\Desktop\testlog.txt' 0 0" 'TeraTermのログファイルを適宜指定します。
    Print #FN, "wait '$'"
    Print #FN, "sendln 'ls'"
    Print #FN, "wait '$'"
    Print #FN, "logclose"
    Print #FN, "end"
    Close #FN

    'TeraTerm実行 (WScript.Shell)
    Dim wsh As Object
    Dim resp As Integer

    Set wsh = CreateObject("WScript.Shell")
    resp = wsh.Run("""" & PATH & """""" & ttlPATH & """", 1, True)

    If resp = 1 Then
        MsgBox "失敗"
    End If

    Set wsh = Nothing

    Kill ttlPATH 'ttlファイル削除

    'TeraTermログファイルを開いて、MsgBoxに出力します。  
    Dim buf As String
    Open "C:\Users\hogehoge\Desktop\testlog.txt" For Input As #1
        'Do Until EOF(1)
            Line Input #1, buf
            MsgBox buf
        'Loop
    Close #1
End Sub