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がテキスト出力されます。

■補足

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








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