Самый быстрый метод:
Вот метод гораздо быстрее и компактнее , чем любой других ответов, а работает с числовыми или текстовыми значениями:
Function IsIn(valCheck, valList As String) As Boolean
IsIn = Not InStr("," & valList & ",", "," & valCheck & ",") = 0
End Function
Примеры:
Используйте IsIn
с числовым значением:
Sub demo_Number()
Const x = 2
If IsIn(x, "1,2,3") Then
Debug.Print "Value " & x & " was Found!"
Else
Debug.Print "Value " & x & " was not Found."
End If
End Sub
Используйте IsIn
со строковым значением:
Sub demo_Text()
Const x = "Dog"
If IsIn(x, "Me,You,Dog,Boo") Then
Debug.Print "Value " & x & " was Found!"
Else
Debug.Print "Value " & x & " was not Found."
End If
End Sub
Сравнение скорости:
Чтобы сравнить скорость, я запустил тест из принятого ответа 100 000 раз:
0.406 sec (FASTEST)
Эта функция (используется InStr ):
1.828 sec (450% slower)
Принято Ответ с функцией ISIN
1.799 sec (440% slower)
Ответ с помощью «IsInArray» из freeVBcode
0.838 sec (206% slower)
Ответ с измененной функцией «IsInArray»
Я не включил более длинный ответ , который использует SELECT..CASE
, поскольку целью ОП было предположительно упростить и сократить задачу по сравнению с "if x=1 or x=2 or x=3 then
".