我想检查一个单元格是否等于某些元素,如下例所示。
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中有类似内容吗?
答案 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
请注意,上述内容区分大小写。如果您使用大小写并且不关心大小写,请使用LCASE
或UCASE
函数转换为单个案例:
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