質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Tera Term

Tera Termは、TeraTerm Projectが開発する国産のWindows向けターミナルソフト。telnetプロトコルでのリモートホストへの接続やCOMポートのシリアル接続が可能で、マクロが利用できます。

Q&A

1回答

3933閲覧

エクセル内のIPアドレスやポート、ホスト名、コマンドをVBAマクロを用いて、teratermマクロの内容に沿って出力し、 ログ収集用のteratermマクロを作成する方法

PIERROT

総合スコア0

Tera Term

Tera Termは、TeraTerm Projectが開発する国産のWindows向けターミナルソフト。telnetプロトコルでのリモートホストへの接続やCOMポートのシリアル接続が可能で、マクロが利用できます。

0グッド

0クリップ

投稿2022/07/28 03:54

編集2022/07/29 13:54

前提

経験の浅いネットワークエンジニアです。

エクセル内のIPアドレスやポート、ホスト名、コマンドをVBAマクロを用いて、teratermマクロの形式に沿って出力し、
ログ収集用のteratermマクロを作成したいです。

VBAマクロを用いて以下のteratermマクロのフォーマットにエクセル内の各データを変数として出力し、
teratermマクロのファイルを『HOST名_IPアドレス.ttl』のような形で必要分作成したい。

<変数(エクセルから引っ張りたいデータ)>
①HOST名=HOST名
②XXX.XXX.XXX.XXX=IPアドレス
③PP=ポート番号
④AAA=接続方式(ssh or telnet)
⑤BBB=User名
⑥CCC=パスワード
⑦コマンド*=コマンド

<teratermマクロ>
connect 'XXX.XXX.XXX.XXX:PP /AAA /2 /auth=password /user=BBB /passwd=CCC'
;connect 'XXX.XXX.XXX.XXX:PP /AAA'

getdate LOG_NAME 'HOST名_%Y%m%d_%H%M.log'
getdir LOG_PATH
strconcat LOG_PATH '\log'
foldersearch LOG_PATH
if result=0 then
foldercreate LOG_PATH
endif
strconcat LOG_PATH LOG_NAME

logopen LOG_PATH 0 1 0 0 1

waitregex '^HOST名.#'
sendln "コマンド1"
waitregex '^HOST名.
#'
sendln "コマンド2"
waitregex '^HOST名.#'
sendln "コマンド3"
waitregex '^HOST名.
#'
sendln "コマンド4"

<Sheet1>
イメージ説明

VBAマクロを実行した結果、HOST1~10に対する『HOST名_IPアドレス.ttl』が作成を実現したいです。

コメントをくださったcan110様から以下のURLを参考に作成可能というお話をいただきコードを作成しています。
参考URL:https://moripro.net/vba-outlook-createmail/

もっとも、現状としてはテキストファイルが指定のフォルダに作成はできるものの、中身が記載されていない状態です。
可能であれば、VBAマクロのコード内容をご確認いただき誤っている箇所がありましたらご教示いただけますでしょうか。
お手数をお掛けしますが、何卒宜しくお願い致します。

can110様、その他有識者様

textファイルは指定のディレクトリに作成できたのですが、中身が記載されておりませんでした。
もし、何か原因等わかる場合、ご教示いただけますでしょうか。
尚、エクセル側の記載については大元の依頼文を編集しましたのでご確認いただければ幸いです。


Enum col '列番号を定義
HOST名 = 1
IPアドレス = 2
ポート番号 = 3
ユーザー名 = 4
パスワード = 5
End Enum

Sub main()

Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("sheet1")

Dim fileSysObj
'ファイルシステムオブジェクトの生成
Set fileSysObj = CreateObject("Scripting.FileSystemObject")

Dim textFileObj
'テキストファイルオブジェクトの生成
Set textFileObj = fileSysObj.CreateTextFile("C:\Users\XXXXXi\Desktop\test\test.txt", True)

Dim r As Long, lastRow As Long
lastRow = ws.Cells(1, 1).End(xlDown).Row

For r = 2 To lastRow

'テキストオブジェクト作成
Set fs = CreateObject("Scripting.FileSystemObject")

'テキスト本文の文字列を作成
Dim textBody As String
textBody = CreateTextBody(ws, r)

Next r

End Sub

' 機能:Excelシート上の指定行番号のテキスト本文を作成する
Function CreateTextBody(ws As Worksheet, r As Long) As String

Dim Hostname As String, IPaddress As String, Port As String, Username As String, Password As String
Hostname = ws.Cells(r, col.HOST名).Value
IPaddress = ws.Cells(r, col.IPアドレス).Value
Port = ws.Cells(r, col.ポート番号).Value
Username = ws.Cells(r, col.ユーザー名).Value
Password = ws.Cells(r, col.パスワード).Value

Dim body As String 'テキスト本文
body = Replace(body, "(HOST名)", Hostname)
body = Replace(body, "(IPアドレス)", IPaddress)
body = Replace(body, "(ポート番号)", Port)
body = Replace(body, "(ユーザー名)", Username)
body = Replace(body, "(パスワード)", Password)

CreateTextBody = body

End Function
Sub ttl作成()

End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

RiaFeed

2022/07/28 05:59

セルの内容を基にテキストファイル吐き出す程度ならわざわざPythonでやらなくてもVBAでよくね?って気がする
okakemetal

2022/07/28 06:14

すでにコメントついてましたね。同意です。
PIERROT

2022/07/28 06:47

>RiaFeed様、okakemetal様 コメントありがとうございます!! VBAで実施する場合、どのようなVBAマクロになりますでしょうか。 ご教示いただけますと助かります!m(__)m 尚、pythonで実施を考えた理由としては頂いたコードとエクセルがあれば、.pyを実行すれば実現可能と考えた次第でございます。VBAマクロについてあまり知識がなく複雑なものの場合、実現が難しいのではと考えてしまったことが理由でございます。(コードを張り付けて実行程度で実現が可能であればわたしでも可能かと思います。) お手数をお掛けしますがご助力いただけますと大変助かります!!m(__)m
can110

2022/07/28 07:13

https://teratail.com/help > 作業依頼のような投稿をして課題や仕事を無償でやってもらう場所ではありません。 よって、この場で望む回答を得るのはかなり難しいかと思います。
PIERROT

2022/07/28 07:32

ご指摘ありがとうございます。 自身で調べているとVBAマクロでTeratermマクロを生成し実行するようなマクロはインターネット上でも目にはするのですが、以下のような条件の参考URLがなく困っております。 ・VBAを用いてTeratermマクロを生成する。(実行はしない) ・Excel上のリスト(HOSTやIPアドレス、ポート、コマンドなど)から値を抽出して、フォーマットに即した形でアウトプットファイル(ttlファイル)を生成する。 もしVBAに詳しい方でございましたら、コードの作成ではなくとも、何かヒントとなるURLページなどがあればご教示いただけますと助かります。
novelistory

2022/07/29 04:26

>VBAマクロのコード内容をご確認いただき誤っている箇所がありましたらご教示いただけますでしょうか。 回答のスレッドに記載いただいているものがそうなのでしょうか。 質問は後から修正できますので、質問文に追記いただくと皆さま回答しやすいかと思います。
PIERROT

2022/07/29 04:54

> novelistory様 ご指摘ありがとうございます! 回答のスレッドに記載しているものが現状のコードとなります。 こちら質問文に追記させていただきました。 お手数をお掛けしますが、ご確認いただきアドバイスいただけたら幸いです。
guest

回答1

0

基本的な流れは【VBAでOutlook操作】Excelシートのデータから下書きメールを一括作成するが参考になるかと思います。
上記にて、出力データとしては、メールではなく.ttlという拡張子の単なるテキストファイルとして出力するように応用すればよいです。

投稿2022/07/28 07:43

can110

総合スコア38233

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

PIERROT

2022/07/28 07:48

参考URLありがとうございます!!(泣) 自身で作成してみます!! 自身で作成させていただいた結果、躓く箇所がありましたら再度ご質問させていただきたく・・・ よろしくお願いいたします!!!
PIERROT

2022/07/28 09:42

>can110様 頂いたURLを参考に以下記載してみましたが、「Password = ws.Cells(r, col.パスワード).Value」にて「型が一致しません」と弾かれてしまいます。原因についてご教示いただけますと助かります。 尚、一旦、接続方式とコマンドについては記載せずに作成しております。 ----------- Enum col '列番号を定義 HOST名 = 1 IPアドレス = 2 ポート番号 = 3 ユーザー名 = 4 パスワード = 5 End Enum Sub main() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("sheet1") Dim fileSysObj 'ファイルシステムオブジェクトの生成 Set fileSysObj = CreateObject("Scripting.FileSystemObject") Dim textFileObj 'テキストファイルオブジェクトの生成 Set textFileObj = fileSysObj.CreateTextFile("test.txt", True) Dim r As Long, lastRow As Long lastRow = ws.Cells(1, 1).End(xlDown).Row For r = 2 To lastRow 'テキストオブジェクト作成 Set fs = CreateObject("Scripting.FileSystemObject") 'テキスト本文の文字列を作成 Dim textBody As String textBody = CreateTextBody(ws, r) Next r End Sub ' 機能:Excelシート上の指定行番号のテキスト本文を作成する Function CreateTextBody(ws As Worksheet, r As Long) As String Dim Hostname As String, IPaddress As String, Port As String, Username As String, Password As Long Hostname = ws.Cells(r, col.HOST名).Value IPaddress = ws.Cells(r, col.IPアドレス).Value Port = ws.Cells(r, col.ポート番号).Value Username = ws.Cells(r, col.ユーザー名).Value Password = ws.Cells(r, col.パスワード).Value Dim body As String 'テキスト本文 body = Replace(body, "(HOST名)", Hostname) body = Replace(body, "(IPアドレス)", IPaddress) body = Replace(body, "(ポート番号)", Port) body = Replace(body, "(ユーザー名)", Username) body = Replace(body, "(パスワード)", Password) CreateTextBody = body End Function Sub ttl作成() End Sub -----------
PIERROT

2022/07/29 01:25

>can110様、その他有識者様 textファイルは指定のディレクトリに作成できたのですが、中身が記載されておりませんでした。 もし、何か原因等わかる場合、ご教示いただけますでしょうか。 尚、エクセル側の記載については大元の依頼文を編集しましたのでご確認いただければ幸いです。 -------------- Enum col '列番号を定義 HOST名 = 1 IPアドレス = 2 ポート番号 = 3 ユーザー名 = 4 パスワード = 5 End Enum Sub main() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("sheet1") Dim fileSysObj 'ファイルシステムオブジェクトの生成 Set fileSysObj = CreateObject("Scripting.FileSystemObject") Dim textFileObj 'テキストファイルオブジェクトの生成 Set textFileObj = fileSysObj.CreateTextFile("C:\Users\XXXXXi\Desktop\test\test.txt", True) Dim r As Long, lastRow As Long lastRow = ws.Cells(1, 1).End(xlDown).Row For r = 2 To lastRow 'テキストオブジェクト作成 Set fs = CreateObject("Scripting.FileSystemObject") 'テキスト本文の文字列を作成 Dim textBody As String textBody = CreateTextBody(ws, r) Next r End Sub ' 機能:Excelシート上の指定行番号のテキスト本文を作成する Function CreateTextBody(ws As Worksheet, r As Long) As String Dim Hostname As String, IPaddress As String, Port As String, Username As String, Password As String Hostname = ws.Cells(r, col.HOST名).Value IPaddress = ws.Cells(r, col.IPアドレス).Value Port = ws.Cells(r, col.ポート番号).Value Username = ws.Cells(r, col.ユーザー名).Value Password = ws.Cells(r, col.パスワード).Value Dim body As String 'テキスト本文 body = Replace(body, "(HOST名)", Hostname) body = Replace(body, "(IPアドレス)", IPaddress) body = Replace(body, "(ポート番号)", Port) body = Replace(body, "(ユーザー名)", Username) body = Replace(body, "(パスワード)", Password) CreateTextBody = body End Function Sub ttl作成() End Sub --------------
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問