如何检查字符串中的变量号

时间:2014-03-06 15:31:52

标签: string excel vba excel-vba

早上好,

我正在尝试创建VBA代码,以识别是否在value中找到变量string(数字)。 string的长度可能不同,并且可以包含一个或多个由a和空格分隔的数字。我试图使用InStr方法但不幸的是,如果我的value为1且字符串包含17,则它返回为真。我怎样才能使它返回false,因为1不等于17。

以下是我目前的代码:

'FRB_Code and FRB_Array are variable values within my code but for 
'the purpose of this question I have assigned them values.
    FRB_Array = "10, 17, 21" 
    FRB_Code = 1 'ce.Value
    If InStr(FRB_Array, FRB_Code) Then
    MsgBox "Found"
    Else
    MsgBox "Not Found"
    ce.Delete Shift:=xlUp
    End If

    Next ce
    End If 

因此最终结果应该是在FRB_Array中找不到FRB_Code,并且删除了该单元格。

谢谢你的帮助。

4 个答案:

答案 0 :(得分:1)

问题是“1”将“instring”为“1”,“217”,“871”等。更好地用垫子预垫和后垫:

Sub NumberInString()
    BigString = " 1 23 54 79 "
    LittleString = " 23 "
    MsgBox InStr(1, BigString, LittleString)
End Sub

答案 1 :(得分:1)

您可以使用数组。

Sub FindValue()
    Dim sMyString As String
    Dim sToFind As String
    Dim Arr
    Dim i As Long
    Dim bFound As Boolean

    sMyString = "10, 17, 21"
    Arr = Split(sMyString, ", ")
    sToFind = "17"

    For i = 0 To UBound(Arr)
        If Arr(i) = sToFind Then
            MsgBox "Found"
            bFound = True
            Exit For
        End If
    Next i

    If Not bFound Then MsgBox "Not found"
End Sub

答案 2 :(得分:1)

InStr在这里并不合适,因为你是在比较数字而不是字符串。要执行您想要的操作,请将字符串拆分为多个部分并循环检索每个项目的返回数组。 Val用于将数组中的每个项目转换为整数。

bFound = False

FRB_Array = "10, 17, 21"
FRB_Code = 17

ar = Split(FRB_Array, ",")

For i = 0 To UBound(ar)

    If FRB_Code = Val(ar(i)) Then
        bFound = True
    End If
Next i

If bFound Then
    MsgBox ("found")
Else
    MsgBox ("not found")
End If

答案 3 :(得分:1)

您可以使用REGEX来确定匹配。

http://msdn.microsoft.com/en-us/library/twcw2f1c(v=vs.110).aspx

正则表达式将是“1 [^ \ d] | 1 $”并且您将用您的FB_Code值替换1。

表达式有一个或(|)来处理数组中的最后一个数字。