今回はコマンドラインの手順かつ、手順が明確になっており、変更するのがIPアドレス、ホスト名、VLAN番号など定型化されたものには有効と思われる作業手順書を作成した。
VBAで比較的簡単に定型化、自動化できたと思うので記載しておく。
作成しようとした経緯
以前働いていた職場にPythonなどを使って様々な仕事を自動化、省力化し、仕事をやりやすくしてくれる神のような方がいた。
その方が作ったツールの中に、テキスト中の複数の文字列を一括置換するもの(通称:Minna no Memo)があったのだが、シンプルかつとても便利でそのツールのお陰で色々な手順書をコピペで作成し、作業を半自動化することができた。
その便利ツールの簡易版をエクセルVBAで実現できそうな気がしたので作ってみた。
今回はコマンドラインの手順かつ、手順が明確になっており、変更するのがIPアドレス、ホスト名、VLAN番号などパラメーターの変更だけで対応可能な定型化されたものには有効。
具体的には以下のような手順に対して有効。2-3個の置換なら大した手順にはならないが10個以上になると、置換だと確認に込み入った手順が発生し、ヒューマンエラーの温床ってしまう。
温床を作らないよう、今回はマクロで対処してみた。
conf t
int {IF}
ip addr {IP_ADDR} {SUBNET_MASK}
description {DESC}
exit
マクロのコード
いい感じでシンプルに書くことができた。
手直しが面倒くさいのでデバッグ用コードのコメントアウトも恥ずかしげもなく残しておく。
Sub 一括置換()
Dim i As Long
i = 6
Sheets("置換文字列入力欄").Select
Do
If Cells(i, 2).Value = "" Then
Exit Do
End If
Range("A:A").Replace What:=Cells(i, 2), Replacement:=Cells(i, 3), LookAt:=xlPart, MatchCase:=True
'デバッグ用コード
'Range("A:A").Replace What:=Cells(i, 3), Replacement:=Cells(i, 2), LookAt:=xlPart, MatchCase:=True
i = i + 1
Loop
End Sub
機能要件
0.コマンドラインで完結する手順、コンフィグに対してのみ有効なツールとする。
1.定型作業の設定用コンフィグをA列に記載する。
2.1の際、作業ごとに異なる箇所は変数を用意し{]で括っておく。
3.B列には置換対象文字列(変数)を記載する。
4.C列には置換後の文字列(設定値)を記載する。
5.D列には入力例を記載する。この項目はVBA上では特別な設定や変更は施さない。
6.設定変更できる箇所は明示的に色を変え、他の箇所を修正しないように促す。
7.ファイル自体に書き込み制限は行わない。
実装
以下の形で実装してみた。
事前準備:セルに記載する情報
A列に雛型とする手順。B列に変数、C列に変更したい手順を記載。
B列には置換対象文字列(変数)を、 C列には置換後の文字列(設定値)を、 D列には入力例を記載
テスト用として以下を設定。
ID | 置換前変数 | 置換後文字列 | 入力例 |
1 | {IF} | Gi0/1 | Fa0/1 |
2 | {IP_ADDR} | 192.168.0.1 | 192.168.1.1 |
3 | {SUBNET_MASK} | 255.255.255.0 | 255.255.0.0 |
4 | {DESC} | WAN_INT | ほげ |
定型作業の設定用コンフィグをA列に記載
A列の21行目以下に以下の手順を投入。{IF}等{}で括られている文字列が変数。
Ciscoの機器で行うような典型的なインターフェースへのIPアドレス設定コマンド。
conf t
int {IF}
ip addr {IP_ADDR} {SUBNET_MASK}
description {DESC}
exit
B列を参照し、空行までの値をDo~Loopで取得
Dim i As Long
i = 6
Sheets("置換文字列入力欄").Select
Do
If Cells(i, 2).Value = "" Then
Exit Do
Loop
B列で取得した値を元にC列の設定値を取得し、A列の文字列を置換
以下の設定でA列すべてが検索対象になる。
Range("A:A").Replace
以下の処理で表題の通り、B列で取得した値を元にC列の設定値を取得し、A列の文字列を検索し置換。
End If
Range("A:A").Replace What:=Cells(i, 2), Replacement:=Cells(i, 3), LookAt:=xlPart, MatchCase:=True
i = i + 1
実行手順
以下の理由によりボタンは作成せず。直接プロシージャを実行してもらう。
1.VBAを実装したシートが汚くなることを防ぐため
2.処理を知らない人が○○のように無邪気にマクロを実行→システムを崩壊させることを防ぐため
マクロの選択
開発→マクロを選択。
一括置換を実行
マクロ名から「一括置換」を選択し、「実行」ボタンを押下。
設定が置換されたことを確認する。
conf t
int Gi0/1
ip addr 192.168.0.1 255.255.255.0
description WAN_INT
exit
効能
エクセル資料にありがちな値の多重管理と、多重管理が原因のヒューマンエラーの低減に尽きる。
ただし、A列に記載する手順が間違っている場合は、それを是正することはできない。
手順書作成時の値の設定ミスの低減
A列に適切な手順、変数を設定できたなら値の多重管理を防ぐことが可能。
多重管理の抑止
値を一括置換できることで、期待した値が変化しないことを発見することが容易になり、値の多重管理を抑止できるはず。
多重管理を防ぐことで、多重管理棋院のヒューマンエラーを大幅に減らすことが可能。
少なくとも自分の作業で間違った値を設定してしまうことは防ぐことができる。
備考
備忘録を兼ねて記載。
置換文字列はセルの上限まで設定可能
機器の性能に依存するものの11行目以降のb列、C列に置換文字列を記載しても対応可能。
置換対象(コンフィグ、手順書)はA列のみ対象
実装の項目でも記載したが、置換対象のテキストはA列のみ。そのため、判別しやすいようにA列だけセルの色を変えている。
追加機能要件
以下機能の追加を検討中。
1.手順書本体を保管し、別シートに置換後の値(手順書)を記載する機能
2.1の機能を実装した時、複数の手順書を容易に検索する機能
3.シートに作成した手順を「シート名.txt」などでテキストファイルで自動出力する機能
4.対象のマクロをgithubで公開
感謝
改めてMinna no Memoを作成してくださった○やきさんに感謝。
また一緒に仕事したいなあ。
参考URL
Replaceメソッドを使っているところで、シートを参照してあれこれするサイトがなかったので探すのに苦労した。
Loop処理書くときは自分のサイトが一番役に立ったと思う。
ダウンロードURL
まだまだ改良予定。
でもリンクが恰好悪いから1.0をリリースしたらgithubに引っ越しするかも。
コメント