ラベル PC の投稿を表示しています。 すべての投稿を表示
ラベル PC の投稿を表示しています。 すべての投稿を表示

2017年7月7日金曜日

Excel VBAでネットワーク機器のConfigをテキストに出力する

こちらの記事でExcelを使用した効率化を紹介しました。

Excelの計算式でConfigが作成できるなら、
テキスト化も同時にできた方が効率的です。

今回はVBAというプログラミング技術が含まれますが、
テキスト化をするだけなので細かい知識は不要です。
※ボタンの設置方法やコードの貼り付け箇所も解説しています。

ただ、VBAを習得すると非常に便利ですので、
個人的には下記の書籍を手に取ることをお勧めします。


自動計算欄や途中計算欄、「Main」「Sub」シートを、
事前に作成済みであることを前提としますが、
下記、「DATA」シートの黄色枠を入力して、
「Config出力」ボタンのクリックによるテキスト化を紹介します。











正系のConfigが表示される「Main」シートはこのような状態です。
B列にConfig、出力するファイル名がC1セルに表示することに留意してください。











副系のConfigが表示される「Sub」シートはこのような状態です。











ボタンの設置とマクロの登録を行います。
VBAを利用するため、Excelオプションから「開発」タブを表示します。



















「開発」タブから「コードの表示」を選択します。







 
VBAProjectを右クリックし、「挿入」→「標準モジュール」を選択します。


















下記のVBAコードをコピーしてください。

 Sub OutputTextWithoutBlanks()

    Dim fileNum As Integer
    Dim txtLine As String
    Dim myRow As Long
    Dim endRow As Long
  
    'ファイル名の取得
    confFileName = "\" & Range("C1")
              
    '最終行の取得
    endRow = Range("B65536").End(xlUp).Row
  
    'FreeFile値を利用してファイル番号の重複を防ぐ
    fileNum = FreeFile
  
    'ファイルを上書きモードで開く
    Open ThisWorkbook.Path & confFileName For Output As #fileNum
  
    '1行目から開始
    myRow = 1
    '最終行まで繰り返す
    Do Until myRow > endRow
        'B列内容をレコードにセット
        txtLine = Cells(myRow, 2).Value
      
        '空白じゃなかった場合だけ
        If txtLine <> "" Then
            'テキストに書き出し
            Print #fileNum, txtLine
        End If
        '行を加算
        myRow = myRow + 1
    Loop
    'ファイルを閉じる
    Close #infFF
End Sub

Sub SheetProtect()
    ActiveSheet.Protect Password:="administrator"
End Sub

Sub SheetUnprotect()
    ActiveSheet.Unprotect Password:="administrator"
End Sub

Sub CreateTextMain()
    Sheets("Main").Activate
End Sub

Sub CreateTextSub()
    Sheets("Sub").Activate
End Sub

Sub SaveBook()
    ActiveWorkbook.Save
End Sub

Sub QuitWithoutSaving()
    ActiveWorkbook.Saved = True
    ActiveWorkbook.Close
End Sub

Private Sub Button1_Click()
    Call SaveBook
    Call CreateTextMain
    Call SheetUnprotect
    Call OutputTextWithoutBlanks
    Call SheetProtect
    Call CreateTextSub
    Call SheetUnprotect
    Call OutputTextWithoutBlanks
    Call SheetProtect
    Call QuitWithoutSaving
End Sub

コピーしたコードを「Module1」内に貼り付けたら、
上書き保存してください。
















Excelブックの「DATA」シートに戻り、
「開発」タブの「挿入」→「ボタン」を選択し設置します。















マクロ名に「Button1_Click()」と入力し、
マクロの保存先に現在のブック名を選択します。




















ボタンの表示名を変更したい場合は、ボタンを右クリックし、
「テキストの編集」で変更してください。















F12を押し、Excel マクロ有効ブック(*.xlsm)で保存します。











以上で、ボタンをクリックすればConfigがテキスト出力されます。

■補足

保存時、下記のようなメッセージが表示されることがあります。
動作に問題はありませんが、このメッセージを非表示にすることもできます。








非表示にするには、
「ファイル」→「オプション」→「セキュリティセンター」→「セキュリティセンターの設定」を開き、
「ファイルを保存するときにファイルのプロパティから個人情報を削除する」
のチェックを外してください。

2017年7月6日木曜日

Excel関数でIPアドレスを含むNW機器Config作成を補助する

少量であれば問題ありませんが、
Configを作成する際、テキストエディタのみで作成していると、
誤りの原因になったり、時間が多くかかります。

ご存知の方も多いと思いますが、
Excelの関数を工夫することで、効率的にConfigを作成することが可能です。

ユーザからStaticルート、NAT、ACL等の、
設定追加依頼を下記のような電子媒体で入手する場合に便利です。
Cisco機器を例にしていますが、Juniper等でも応用可能と思います。
















上記のパラメータを利用してConfigが出来上がるような
計算式を用意してしまえば、以降は効率化できます。

初歩の学習としては、下記の書籍がお勧めです。


ただ、実際の要件では例外的な考慮が必要になる場合も多く、
全てを効率化することは難しいのが実情ではありますが、
このようなことを意識するかによって効率が大きく変わることがあります。

非常に初歩的な計算式を含みますが、下記ご参考までに。

■基本編

上記の表ですと、NATが簡単です。
""(ダブルクォーテーション)による文字列表現と、
"="(イコール)による参照と、"&"(アンド)による文字列結合を使います。

【計算式】
="ip nat inside source static "&C12&" "&D12

【結果】
ip nat inside source static 10.1.1.1 172.16.100.1

■応用編1

次にStaticルートに取り掛かりますが、
悩ましいのがCIDR表記(192.168.1.0/24等のスラッシュを含む表記)です。

同様の意味をConfigではサブネットマスクで表記する必要があります。

よって、当該セルのPrefix部を取り出し、Prefixから
サブネットマスクに変換します。

①IPアドレス部を取り出します。

【計算式】
=MID(C4,1,FIND("/",C4)-1)

【結果】
10.0.0.0

②Prefix部を取り出します。

【計算式】
=MID(C4,FIND("/",C4)+1,2)

【結果】
8

③変換テーブルを用意します。

このテーブルを使用してPrefixをサブネットマスクに変換します。

1 128.0.0.0 127.255.255.255
2 192.0.0.0 63.255.255.255
3 224.0.0.0 31.255.255.255
4 240.0.0.0 15.255.255.255
5 248.0.0.0 7.255.255.255
6 252.0.0.0 3.255.255.255
7 254.0.0.0 1.255.255.255
8 255.0.0.0 0.255.255.255
9 255.128.0 0.127.255.255
10 255.192.0.0 0.63.255.255
11 255.224.0.0 0.31.255.255
12 255.240.0.0 0.15.255.255
13 255.248.0.0 0.7.255.255
14 255.252.0.0 0.3.255.255
15 255.254.0.0 0.1.255.255
16 255.255.0.0 0.0.255.255
17 255.255.128.0 0.0.127.255
18 255.255.192.0 0.0.63.255
19 255.255.224.0 0.0.31.255
20 255.255.240.0 0.0.15.255
21 255.255.248.0 0.0.7.255
22 255.255.252.0 0.0.3.255
23 255.255.254.0 0.0.1.255
24 255.255.255.0 0.0.0.255
25 255.255.255.128 0.0.0.127
26 255.255.255.192 0.0.0.63
27 255.255.255.224 0.0.0.31
28 255.255.255.240 0.0.0.15
29 255.255.255.248 0.0.0.7
30 255.255.255.252 0.0.0.3
31 255.255.255.254 0.0.0.1
32 255.255.255.255 0.0.0.0

上記がセル:C30~E61に用意されたものとします。

④VLOOKUPで参照させる(Prefixをサブネットマスクに変換)

VLOOKUPの最初の引数は②をVALUE関数で値に変換したものです。

【計算式】
=VLOOKUP(VALUE(MID(C4,FIND("/",C4)+1,2)),$C$30:$E$61,2,0)

【結果】
255.0.0.0 

⑤基本編と同様に、"="と"&"を使ってip route コマンドに組み立てます。

■応用編2

ACLの場合もこれまでの内容で計算式化が可能ですが、
今までに記述しなかった箇所について説明します。

①VLOOKUPで参照させる(Prefixをワイルドカードに変換)

「応用編1」で記述した内容に近いです。
 最後から2番目の数値を2から3に変更することでワイルドカードになります。

【計算式】
=VLOOKUP(VALUE(MID(E21,FIND("/",E21)+1,2)),$C$30:$E$61,3,0)

【結果】
0.255.255.255

②ポート番号が省略される場合や、範囲指定を考慮する。

anyは空白、ハイフンがなければ eq 数値、
ハイフンがあればrange 前半数値 後半数値 という規則で表示させます。
※計算式及び結果1~3は参照するセルがH21~H23で変化しているのみです。

【計算式1】
=IF(H21="any","",IF(ISERROR(FIND("-",H21)),"eq "&H21,"range "&LEFT(H21,FIND("-",H21)-1)&" "&MID(H21,FIND("-",H21)+1,5)))

【結果1】
(空白)

【計算式2】
=IF(H22="any","",IF(ISERROR(FIND("-",H22)),"eq "&H22,"range "&LEFT(H22,FIND("-",H22)-1)&" "&MID(H22,FIND("-",H22)+1,5)))

【結果2】
eq 80

【計算式3】
=IF(H23="any","",IF(ISERROR(FIND("-",H23)),"eq "&H23,"range "&LEFT(H23,FIND("-",H23)-1)&" "&MID(H23,FIND("-",H23)+1,5)))

【結果3】
range 20 21

■番外編

以下はメモです。
セル:G21はCIDR表記「172.31.100.0/24」が記入されています。

(A)と(B)は、NATで1オクテット目が変換される場合に便利です。

(C)と(D)を利用すれば、ネットワークアドレスを記入するだけで、
環境の規則に従い、正系を若番、副系を老番等という計算式も作成可能です。
※(C)に、(D)に1や2を足したものを"&"で結合すればOKです。


(A)1オクテット目を取得する

【計算式】
=MID(G21,1,FIND(".",G21)-1)

【結果】
172

(B)2オクテット目以降を取得する

【計算式】
=MID(MID(G21,1,FIND("/",G21)-1),FIND(".",MID(G21,1,FIND("/",G21)-1))+1,11)

【結果】
31.100.0
※1オクテット目の後のドットも含めたい場合は、後ろの方の"+1"を削除

(C)3オクテット目までを取得する

【計算式】
=MID(G21,1,FIND("$",SUBSTITUTE(G21,".","$",LEN(G21)-LEN(SUBSTITUTE(G21,".",""))))-1)

【結果】
172.31.100

(D)4オクテット目を取得する

【計算式】
=MID(G21,SEARCH(".",G21,SEARCH(".",G21,SEARCH(".",G21,1)+1)+1)+1,SEARCH("/",G21,SEARCH(".",G21,SEARCH(".",G21,1)+1)+1)-SEARCH(".",G21,SEARCH(".",G21,SEARCH(".",G21,1)+1)+1)-1)

【結果】
0

2015年11月24日火曜日

無線LAN(Wi-Fi)の電波が届くエリアを拡張する

私は最近引越しを行い、無事に完了したのですが、
リビングに設置済みである無線LANアクセスポイント(以下、AP)
が提供するWi-Fiを自室で利用できないことが判明しました。

通常、APの設置場所を調整することで改善を試みるのですが、
APが壁埋め込み型であり、見た目はとても素敵なのですが、
移設できない点はちょっと不便ですね。

初めて見た製品でしたが、FGN200という製品のようです。
http://www.fg-products.com/products_detail/index.html


スマホのLTE回線が容量制限に抵触するのを防ぐため、
自宅ではWi-Fiを使用するのが習慣なので、
解決策を調べてみました。

すると、「無線LAN中継機」というものがあることを知りました。
これは、インターネットへの出口は既存のAPとしつつ、
既存APの電波が届く範囲を中継して広げてくれるものです。

「特定の部屋でWi-Fiが使えない」という状況にぴったりの製品です。

色々な製品があるようですが、
コンセントに直接挿すことができ、上のコンセントを塞がないという点で、
下記の製品を購入することにしました。


Amazonのレビューを見ると、
APがブリッジモードだと単純設定だけでは動作しないという書き込みがあり、
少々不安だったのですが、APの設定画面を見ると、
以下のようにRouterモードと記載されていたので、問題ないと判断しました。



自宅のAPは製品ではなくマンション管理上の都合ということで、
WPSに対応していなかったため、手動で接続設定をする必要がありましたが、
SSIDとキーを手動入力するだけなので簡単でした。

結果、見事に自室でWi-Fiが繋がるようになりました!
見た目に違和感もなく満足しています。

今年の8月に発売した上位モデル もあるようなので、
予算の都合も含めて検討するのが良いと思います。

2014年7月27日日曜日

Excelで特定箇所を折りたたんで頻繁に非表示、再表示する(グループ化)

Excelを使っていると、表が横に長い場合等は、必要に応じて、
非表示にしたり、表示したりを頻繁に切り替える範囲があると思います。

「グループ化」という機能を使うと、とてもこの操作が簡単になります。
(欄外に、 [ +]  とか [ - ] が表示されているアレです。)

通常、非表示にするときには以下のように表示にしたい範囲を選択して、
 












右クリックから、[非表示]を選択していることと思います。
 











再度表示したいときは、非表示にした範囲を含む箇所を選択して、
右クリックから、[再表示] を選択します。
 
















しかし、何度も表示、非表示を切り替えたいときには、
毎回この範囲選択をするのは大変です。
そこで、 範囲を選択し、[データ]タブから、[グループ化]を選択します。










この後、欄外に表示された[ - ](マイナス)ボタンをクリックすると、










選択していた範囲が非表示になります。
逆に、[ + ] (プラス)になっている場合にクリックすると再表示されます。
 

















2014年6月9日月曜日

ディスプレイが一時的に消えたり、色がおかしいときの原因と対処

PCで作業をしていると、モニタが一時的に消えたり、
ちらつきの発生や、色がおかしくなったりする場合があります。
この場合の「一時的に消える」とは突然1秒程度画面が消えては戻り、
また1分程度後に画面が消えることを繰り返す事象のことです。

この事象は、HDMI接続のディスプレイでの動画編集作業中など、
PCの高負荷状態( = 消費電力が高い)時に起こりやすいです。

使用状況にもよりますが、この場合、まずは電源まわりを疑って下さい。

PCの周辺の電源タップが、タコ足配線になっていませんか?

使用しない機器の電源プラグを抜いたり、
PC本体やモニタの電源接続位置を、壁コンセントから近い位置に変更します。

スイッチが付いた電源タップのコンセントスイッチがOFFでも、
この現象が起きる場合がありますので、
使用しない機器の電源プラグを実際に抜いてみることをお勧めします。

※スイッチが付いた電源タップとは、以下のようなものです。



また、100円均一などで購入した安価な電源タップを介する場合も、
この現象が起きる場合がありますので、ご注意下さい。

冒頭に、 「HDMI接続の」と記載した通り、ディスプレイ用の
ケーブル種別を変更することでも改善の可能性があります。
具体的には、D-Sub15ピン接続DVI接続 を試してみることもお勧めです。

2014年5月11日日曜日

Excelで指定したセル以外を保護して編集を禁止する

自分が作成したExcelのファイルでも、他の人に記入してもらいたい時があります。
しかし、他の人にファイルを渡して記入を依頼しても、
計算式などが削除されてしまうと面倒なことになります。

それを防ぐために、「シートの保護」という機能が便利です。

例として、黄色セル以外は編集を禁止したい とします。















特に何も設定しないと、このように黄色セル以外も編集されてしまいます。
















編集を許可するセル の1つを選択します。
















[Ctrl]を押しながら、編集を許可するセルを全てクリックして選択します。















この状態で右クリックから「セルの書式設定」を選択します。
※[Ctrl]+[1]でも同じ画面を表示することができますので便利です。



















「保護」タブから「ロック」のチェックをはずし、「OK」をクリックします。






















「校閲」タブから「シートの保護」をクリックします。















ここは必要に応じて選択すれば良いのですが、
他者に編集を許可するセルだけを、選択・編集許可する場合は
「ロックされたセル範囲の選択」のチェックを外して「OK」をクリックします。




















これで、黄色セルだけが編集可能になりました。
他のセルは選択できなくなっているはずです。

2014年4月27日日曜日

挿入・削除しても乱れない、Excelでの連番入力方法

Excelを使用して、連番を入力したいとき、
皆さんはどのように入力しているでしょうか。

行をコピー挿入、削除しても番号を乱れさせずに
追加させるには、最初の行に[1]を、次の行に以下の計算式を入力して、
2行目から下に計算式をコピーして下さい。

=INDIRECT(ADDRESS(ROW()-1,COLUMN()))+1  

※上のセルの値に、1を加えた値を表示する という意味の計算式です。

一般的によく使用されているのは・・・
以下のように最初のセルに[1]、次の行に[2]を入力する、または、
2つ目のセルに (下図の場合ですと =B2+1)と入力をしてから 、
















セル右下のフィルハンドルをドラッグ(またはダブルクリック)、
オートフィル機能を利用して、















連番を入力することが多いのではないかと思います。















 ただし、この方法では、行をコピーして・・・















、「コピーしたセルの挿入」を選択した場合、


















[6]が2行ある状態になってしまいます。














これを防ぐために、前述の計算式
=INDIRECT(ADDRESS(ROW()-1,COLUMN()))+1  
とオートフィル機能を使うと、












右クリックから「コピーしたセルの挿入」を選択しても、


















連番が重複したりして、乱れることはありません。

















 ちなみに削除の場合も、





















 連番が乱れることはありません。







2014年4月26日土曜日

Excel 2013 起動時「スタート画面」を表示せず新規ブックを開く

今とても幅広く使用されているのはExcel 2010かと思いますが、
現在はExcel 2013がリリースされており、
私のPCもExcel 2013がインストールされています。

まず戸惑ったのが、起動時に以下の画面が表示されることです。
以下の画面は、Excel 2013から追加された、「スタート画面」です。

[Esc]キーを押下するか、「空白のブック」をクリックすると、
従来のExcelブックの画面になりますが、毎回この操作をするのも手間ですよね。

今回は、この「スタート画面」を表示させなくする方法を記載します。


















「スタート画面」が表示された状態で
 [Esc]キーを押下するか、「空白のブック」をクリックしてから
「ファイル」 をクリックします。
















「オプション 」をクリックします。
















「基本設定」→「このアプリケーションの起動時にスタート画面を表示する」の
チェックを外し、「OK」 をクリックします。
















以上で、新規Excel起動時にExcel 2010以前と同様の状態になります。