我正在尝试在VBA中编写Excel函数来检查字符串是否包含某些条件。
如果我用冗长的方式写它,我可以让它工作:
If code Like "*ABB*" Or code Like "*ABC* Or code Like "*ABE*" Then ...
但是我有很多标准(现在15个,但将来可能会增加),所以希望我可以在数组中编写它们,例如。
Criteria = Array("*ABB*","*ABC*","*ABE*")
我只是在下一阶段挣扎;检查code
是否属于Criteria
的一些方法。
我一直在网上搜索,找不到类似的东西。
答案 0 :(得分:0)
为每个字段中的条件和循环创建一个数组。返回布尔值的函数应该更容易阅读和维护。
Public Function Contains(ByVal code As String) As Boolean
Dim Criteria As Variant
Criteria = Array("*ABB*", "*ABC*", "*ABE*")
Dim i As Long
For i = LBound(Criteria) To UBound(Criteria)
If code Like Criteria(i) Then
Contains = True
Exit For
End If
Next i
End Function
要打电话:
Debug.Print Contains("WWABB")
'True
答案 1 :(得分:0)
循环遍历数组以查找条件的工作方式如下:
Sub foo()
code = "BCDEFGHIJKLMNOPQRST"
'set the variable code
Criteria = Array("ABB", "ABC", "BCD")
'array of criteria
For i = LBound(Criteria) To UBound(Criteria) 'loop through array
If InStr(code, Criteria(i)) > 0 Then MsgBox "Found criteria " & Criteria(i) 'if found msgbox
Next i
End Sub
答案 2 :(得分:0)
你的是一个相当奇怪的请求,因为*abc*
可以返回非常广泛的意外结果,如果与Like
一起使用,则更多,然后再乘以15,可能更多。另一方面,如果您拥有的Code
值得到很好的控制Like
可能没有比“不区分大小写”更大的含义。这是我在下面建议的解决方案中做出的推定。但是,它只适用于Like
。
我发现奇怪的另一件事是你应该有15个(或更多)不同的标准,所有标准都需要以同样的方式处理。更有可能的是,您应该以不同的方式对待结果。因此,我已将测试构建到一个函数中,该函数返回找到的匹配的序号。如果以下匹配是可接受的,“ABC,DEF,LMN,RST,MIN,MAX,SDR,USA”和Code
包含“ABC”(或“abc”或“Abc”等),则函数返回{ {1}}因为匹配是列表中的第一个标准。如果未找到匹配,则返回0.
下面的代码包含函数本身以及如何调用它的示例。
1