Vba 使用InStr而不是If语句中的And?
我不是在长Vba 使用InStr而不是If语句中的And?,vba,vb6,Vba,Vb6,我不是在长If语句中使用和,而是使用InStr将动态值与已知列表匹配。像这样: If InStr("John, George, Harry", personName) Then... 这样行吗?我应该改用和吗?有更好的办法吗 谢谢。您可以将名称存储在散列中,然后测试它是否在散列中,这比检查它是否在字符串或列表中要快。关于子字符串,例如Anne Marie和person name=Anne,怎么样 您可以使用select case语句来代替 举出例子 不,那不好。如果你这样做,你会找到一个叫“n
If
语句中使用和,而是使用InStr
将动态值与已知列表匹配。像这样:
If InStr("John, George, Harry", personName) Then...
这样行吗?我应该改用和吗?有更好的办法吗
谢谢。您可以将名称存储在散列中,然后测试它是否在散列中,这比检查它是否在字符串或列表中要快。关于子字符串,例如Anne Marie和person name=Anne,怎么样
您可以使用select case语句来代替
举出例子
不,那不好。如果你这样做,你会找到一个叫“n,Ge”和“George”的人
我的VB有点生锈,但您可以:
Dim namearray() As String = {"John", "George", "Harry"}
Dim name As String = "John"
For i = LBound(namearray) To UBound(namearray)
If namearray(i) = personName Then
... i is the array index ...
End If
Next i
我不知道VB6是否有Array.indexOf,但是如果有,那么您也可以使用所描述的方法
如果您的姓名列表非常大,您可能需要使用一个和几个选项
If Instr("[John][George][Harry]","[" & personname & "]") Then
将阻止部分匹配。如果您恰好在Excel vba中,则可以使用内置的“匹配工作表”功能
Application.WorksheetFunction.Match("John",array("John","George","Harry"),false)
我不认为在所有情况下都有一个单一的答案
如果列表非常短且固定,则使用一系列测试或:
If personName = "John" Or personName = "George" Or personName = "Harry" Then
一个中等大小的列表可以表示为一个字符串,如前所述,只需稍加优化:
If InStr("$John$George$Harry$", "$" & personName & "$") Then
您还可以将数组与筛选器()一起用作列表:
如果您有一个预构建的字符串或数组,而不是将它们内联到表达式中,那么这些选项可能会工作得更好
对于更长的列表,您可以使用Scripting.Dictionary对象来保存测试用例。它合并了一个冲突解析哈希,并且有一个Exists()方法。VB6集合也可以工作,尽管您需要使用异常捕获来实现Exists like功能
如果您有多个“字段”要测试(名称和眼睛颜色?),则更好,您可以使用伪造的ADO记录集及其过滤器属性。这样就很容易确定你是有蓝眼睛的乔治还是有棕色眼睛的哈利。对于较长的候选列表,您可以将记录集字段上的dynamic属性Optimize设置为True,以便对其进行哈希处理以获得更好的性能。我知道答案将是列出的其中一个。我不知道是哪一种。如果让用户输入要检查的名称,这也是最好的方法,因为您可以使用Like运算符,或者根据需要使用任何其他类型的模糊字符串匹配算法。我可能需要在一个if语句中使用多个InStr来获得最终结果。第二个可能是找到眼睛的颜色(例如)。不确定这是否会对建议产生影响。
If InStr("$John$George$Harry$", "$" & personName & "$") Then
If UBound(Filter(Array("$John$", "$George$", "$Harry$"), _
"$" & personName & "$")) >= 0 Then