Имитация оператора "IN"
Как можно добиться:
if X in (1,2,3) then
вместо:
if x=1 or x=2 or x=3 then
Другими словами, как лучше всего имитировать оператор IN
в VBA для excel?
Ответы
Ответ 1
Я не думаю, что есть очень элегантное решение.
Однако вы можете попробовать:
If Not IsError(Application.Match(x, Array("Me", "You", "Dog", "Boo"), False)) Then
или вы можете написать свою собственную функцию:
Function ISIN(x, StringSetElementsAsArray)
ISIN = InStr(1, Join(StringSetElementsAsArray, Chr(0)), _
x, vbTextCompare) > 0
End Function
Sub testIt()
Dim x As String
x = "Dog"
MsgBox ISIN(x, Array("Me", "You", "Dog", "Boo"))
End Sub
Ответ 2
Вы также можете попробовать оператор CASE вместо IF
Select Case X
Case 1 To 3
' Code to do something
Case 4, 5, 6
' Code to do something
Case 7
' Code to do something
Case Else
' More code or do nothing
End Select
Ответ 3
Вы пробовали
eval("3 in(1,2,3,4,5)")
Ответ 4
Вы также можете использовать функцию фильтра, как описано здесь
Ответ 5
Там нет, о котором я знаю.
Я обычно использую домашнюю функцию InArray(), такую как функция http://www.freevbcode.com/ShowCode.asp?ID=1675
Вы также можете сделать версию, которая выполняет итерацию через массив вместо конкатенации, если это более подходит для вашего типа данных.
Ответ 6
Я написал это сейчас...
Public Function IsInArray(FindValue As Variant, ParamArray arrEmailAttachment()) As Boolean
Dim element As Variant
For Each element In arrEmailAttachment
If element = FindValue Then
IsInArray = True
Exit Function
End If
Next element
IsInArray = False
End Function