Имитация оператора "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