2013-02-28 2 views
2

Моя ситуацияExcel VBA Проверить между значениями в функции InStr

Моя главная причина, почему я сделал этот код, чтобы проверить, является ли IP-адрес является стажером или ехЬегп соединение.

Ячейка в моем листе данных, содержит не только значение IP-адреса, но также может содержать другой тип текста. F.E. :

"BE-ABCDDD-ДДС 172.16.23.3"

Моя проблема

Я хочу, чтобы проверить, если ячейка содержит IP-адрес "172.16" между "172.31" В примере над ним вернется значение 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." в данный момент.

Заранее спасибо

+0

Ваши вопросы мне кажутся неясными. Можете ли вы перефразировать ?? – 2013-02-28 10:38:03

ответ

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 
+0

Спасибо! оно работает – user2119093

0

я бы настоятельно рекомендовал регулярное выражение для этого. Если вы используете VBA, вы можете ссылаться на библиотеку Microsoft VBScript Regular Expressions в своем проекте VBA.

После того, как вы указали это, вы можете использовать регулярное выражение для поиска строки для заданного шаблона соответствия. Вот пример выражения, подходящего для регулярного выражения VBScript для «возможно-допустимой-IP-строки»: \ d {1,3}. \ D {1,3}. \ D {1,3}. \ D {1,3}

Это будет соответствовать строке, содержащей последовательность из 4, 1-3 цифр с периодами в ней, например 127.0.0.1, а также, возможно, 955.556.234.234. Поэтому, если у вас есть строка, которая соответствует, я бы проверял ip-компоненты в коде, прежде чем считать IP «действительным». Когда у вас есть действующий IP-адрес, он должен быть привязан, чтобы проверить ваше состояние.

Надеюсь, это поможет!

+0

Здравствуйте, Спасибо за ваш быстрый ответ. Я очень хорошо знаком с VBA, я понимаю, что вы имеете в виду, но я не могу его реализовать. Я думаю, мне нужен шаг за шагом – user2119093

Смежные вопросы