早上好,
我正在尝试创建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,并且删除了该单元格。
谢谢你的帮助。
答案 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。
表达式有一个或(|)来处理数组中的最后一个数字。