有没有一种简单的方法可以在vba中选择多个条件?

时间:2017-03-10 14:00:11

标签: vba excel-vba excel

我想检查一个单元格是否等于某些元素,如下例所示。

If Range("A1") = "Element1" Or Range("A1") = "Element2" Or Range("A1") = "Element3" Or Range("A1") = "Element4" Or Range("A1") = "Element5" Then 
 'Do the code
End if

我认为这种方式有点混乱,特别是因为我制作的真实代码将有35个元素。

我知道在MySql中可以使用命令IN,如下例所示。

subject IN ('Cookery','Chemistry','Literature')

vba中有类似内容吗?

1 个答案:

答案 0 :(得分:3)

Case转换可能最适合此:

Select Case Range("A1").Value
    Case "Element1", "Element2", "Element3", "Element4", "Element5"
        'Do stuff

    Case Else
         'Do other stuff, or do nothing at all

End Select

请注意,上述内容区分大小写。如果您使用大小写并且不关心大小写,请使用LCASEUCASE函数转换为单个案例:

Select Case LCase(Range("A1").Value))
    Case "element1","element2","element3","element4","element5"

或者,您可以在矢量数组上使用滤镜功能:

Const Elements As String = "element1,element2,element3,element4,element5"
Dim val$, myArray
myArray = Split(Elements, ",")
val = "element3"

    If UBound(Filter(myArray, val)) >= 0 Then
        'the value is in the array
        MsgBox True
    Else
        'the value is not in the array
        MsgBox False
    End If

虽然有Filter函数存在一些怪癖,但我认为并不总是100%可靠,因为它会返回部分匹配。

或者您可以对数组使用Match函数:

If Not IsError(Application.Match(val, myArray, False)) Then
    'value exist in the list
Else
    'value does not exist in the list
End If