适用于多个条件的VBA代码

时间:2018-01-12 09:47:58

标签: excel vba excel-vba

我正在尝试在VBA中编写Excel函数来检查字符串是否包含某些条件。

如果我用冗长的方式写它,我可以让它工作:

If code Like "*ABB*" Or code Like "*ABC* Or code Like "*ABE*" Then ...

但是我有很多标准(现在15个,但将来可能会增加),所以希望我可以在数组中编写它们,例如。

Criteria = Array("*ABB*","*ABC*","*ABE*")

我只是在下一阶段挣扎;检查code是否属于Criteria的一些方法。

我一直在网上搜索,找不到类似的东西。

3 个答案:

答案 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