エクセル マクロ(VBA)でCisco Interface設定を自動化

スポンサーリンク

ボタンを押すとインターフェース用の指定したデータをConfigに作成するマクロです。
コードは美しくはないです。

左上のボタンを押すと下記の様なConfigが作成されます。
・B列のチェックが入っている行のConfigを作成します。
・★の所まで実行します。

マクロ

Dim CkJudge As String
Dim ConfWsName As String
Dim IFWsName As String
Dim OutCell As Integer
Dim ColumnNo As Integer
Dim LastRow As Integer

Dim ConfWs As Worksheet

Dim test As String

'シートが存在するか確認して、無い場合は作成する。関数:fc_WsCkを実行
If fc_WsCk("ConfigSheet") = True Then
    'ConfigSheetの中身を削除します
    If MsgBox("ConfigSheetのデータを削除します", vbYesNo) = vbYes Then
        Worksheets("ConfigSheet").Columns("A:A").EntireRow.Clear
    Else
        MsgBox "ConfigSheetのデータを確認してください"
        Exit Sub
    End If
Else
    Dim Currentsheet As Worksheet
    Set Currentsheet = ActiveSheet ' 現在アクティブなシートを取得する
    Worksheets.Add After:=Worksheets(Worksheets.Count)
    ActiveSheet.Name = "ConfigSheet"
    Currentsheet.Activate ' 元のシートをアクティブにする
End If

'シート名を取得
IFWsName = Worksheets("IF").Name
ConfWsName = Worksheets("ConfigSheet").Name

LastRow = Cells(Rows.Count, 2).End(xlUp).Row '2列目のセルのデータが入っている最終行を選択
  'Rows.Countは、シートの行数 ・シートの2列の最終行から、上に向かって最初にデータがあるセルを返す
  
OutCell = 1


For t = 4 To LastRow    '4行目から最終行まで回す
    '実行する行かチェックする
    CkJudge = Worksheets(IFWsName).Cells(t, 2).Value
    
    If CkJudge = "True" Then
        ColumnNo = Worksheets(IFWsName).Cells(t, Columns.Count).End(xlToLeft).Column '列の最終行を取得

        For tt = 3 To ColumnNo
            If IsEmpty(Cells(t, tt).Value) Or Cells(t, tt).Value = "-" Then
            Else
                Dim insertValue As String
                Dim PreCellValue As String
                Dim TitleCell As String
                PreCellValue = Cells(t, tt - 1).Value  '1個前のデータを取得(Port Modeの値を取得するために使用)
                TitleCell = Cells(2, tt).Value  'タイトルを取得
                insertValue = fc_CellValue(TitleCell, Cells(t, tt).Value, PreCellValue)
                Worksheets(ConfWsName).Cells(OutCell, 4).Value = insertValue
                OutCell = OutCell + 1
            End If
        Next

    ElseIf CkJudge = "★" Then
         MsgBox "完了"
        Exit For
    Else
    End If
    
Next

End Sub


Function fc_WsCk(ByVal WorkSheetName As String) As Boolean
  For Each ConfWs In ActiveWorkbook.Worksheets
    If ConfWs.Name = WorkSheetName Then
        fc_WsCk = True
        Exit Function
    End If
  Next ConfWs
fc_WsCk = False
End Function

Function fc_CellValue(ByVal tt As String, ByVal CurrentValue As String, ByVal PreValue As String) As String
    Select Case tt
        Case "Port No"
            fc_CellValue = "interface " & CurrentValue
        Case "Description"
            fc_CellValue = "description " & CurrentValue
        Case "Port Mode"
            Select Case CurrentValue
                 Case "no switchport"
                    fc_CellValue = CurrentValue
                 Case "access", "trunk"
                    fc_CellValue = "switchport mode " & CurrentValue
            End Select
        Case "VLAN"  '1個前のPort modeの値によって判断
            Select Case PreValue
                 Case "no switchport"
                    fc_CellValue = ""
                 Case "access"
                    fc_CellValue = "switchport access vlan " & CurrentValue
                 Case "trunk"
                    fc_CellValue = "switchport trunk allowed vlan " & CurrentValue
            End Select
        Case "IP Addr"
            fc_CellValue = "ip address " & CurrentValue
        Case "Native VLAN"
            fc_CellValue = "switchport trunk native vlan " & CurrentValue
        Case "Speed"
            fc_CellValue = "speed" & CurrentValue
        Case "Duplex"
            fc_CellValue = "duplex " & CurrentValue
        Case "STP"
            fc_CellValue = "spanning-tree " & CurrentValue
        Case "Shutdown"
            fc_CellValue = CurrentValue
        Case "Ether Channel"
            fc_CellValue = "channel-group " & CurrentValue & " mode on"
        Case "fin"
            fc_CellValue = CurrentValue
    End Select
End Function


コメント

タイトルとURLをコピーしました