2

私の状況

このコードを作成した主な理由は、IP アドレスがインターン接続か外部接続かを確認することです。

私のデータ シートのセルには、IP アドレスの値だけでなく、他の種類のテキストも含まれている可能性があります。鉄 :

「BE-ABCDDD-DDS 172.16.23.3」

私の問題

セルに「172.31」の間に「172.16」の IP アドレスが含まれているかどうかを確認したい上記の例では、値 true/Intern が返されます。セルに「172.32」の値が含まれている場合、false/extern が返されます。

これは私のコードです:

For Each source In Range("E6", Range("E" & Rows.Count).End(xlUp))      
    If (InStr(source, "-10.") <> 0 Or InStr(source, "-192.168.") <> 0 Or InStr(source, "-  172.") <> 0) And InStr(source.Offset(0, 22).Value, "Extern") = 0 Then
source.Offset(0, 22) = "Intern"
    End If
Next source

私のコードでわかるように、「172」のみをチェックします。この時点で。

前もって感謝します

4

2 に答える 2

0

そのテストを独自の関数に分割することができます/すべきです。文字列を解析するだけの例を次に示します。

Sub Main()

    Dim rCell As Range

    For Each rCell In Sheet1.Range("A1:A5").Cells
        If IsInternal(rCell.Value) Then
            Debug.Print rCell.Address, rCell.Value
        End If
    Next rCell

End Sub

Public Function IsInternal(sIpAdd As String) As Boolean

    Dim bReturn As Boolean
    Dim lIpStart As Long
    Dim lSecQuad As Long

    Const sIPSTART As String = "172."
    Const lMIN As Long = 16
    Const lMAX As Long = 31

    'Default to false unless we explictly set it to true
    bReturn = False

    'See if 172. exists in the string
    lIpStart = InStr(1, sIpAdd, sIPSTART)

    'If 172. exists
    If lIpStart > 0 Then
        'Parse out the second quadrant
        lSecQuad = Val(Mid(sIpAdd, lIpStart + Len(sIPSTART), 2))

        'See if the second quadrant is in range
        'and set to true if so
        bReturn = lSecQuad >= lMIN And lSecQuad <= lMAX
    End If

    IsInternal = bReturn

End Function
于 2013-02-28T15:00:39.917 に答える
0

これには正規表現を強くお勧めします。VBA を使用している場合は、VBA プロジェクトで Microsoft VBScript 正規表現ライブラリを参照できます。

それを参照したら、正規表現を使用して、指定された一致パターンの文字列を検索できます。「おそらく有効な IP 文字列」の VBScript 正規表現に適した表現の例を次に示します: \d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}

これは、127.0.0.1 のように、1 ~ 3 桁の 4 桁の数字とピリオドを含む文字列に一致しますが、955.556.234.234 の可能性もあります。したがって、一致する文字列を取得したら、IP が「有効」であると見なす前に、コード内の IP コンポーネントを検証します。有効な IP を取得したら、状態を簡単に確認できます。

お役に立てれば!

于 2013-02-28T10:36:13.773 に答える