2009-10-01 12 views
15

¿Cómo se puede lograr:Imitando el operador "IN"

if X in (1,2,3) then 

en lugar de:

if x=1 or x=2 or x=3 then 

En otras palabras, ¿cómo se puede imitar mejor el operador IN en VBA para Excel?

Respuesta

13

No creo que haya una solución muy elegante.

Sin embargo, usted podría intentar:

If Not IsError(Application.Match(x, Array("Me", "You", "Dog", "Boo"), False)) Then 

o usted podría escribir su propia función:

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 
+1

¿No podría simplemente evitar la función y usar algo como: 'InStr (1, "MeYouDogBoo", x) '? – redOctober13

+0

@ redOctober13 esto podría funcionar si separa los elementos de la lista con un delimitador que no se puede encontrar en x. De lo contrario, YouDo activaría el InStr. – mrdaddychops

3

¿Usted intentó

eval("3 in(1,2,3,4,5)") 
+0

Esto debería funcionar. –

+0

Obtengo "sub o función no definida" - ¿no sé si esto es porque estoy en VBA (no en VB)? he editado la pregunta ... –

+0

Es la función de acceso VBA. Lo siento, no vi que mencionas excel VBA. – THEn

1

No hay ninguno que yo sepa .

que suelen utilizar una función de elaboración casera InArray() como el de http://www.freevbcode.com/ShowCode.asp?ID=1675

También podría hacer una versión que itera a través de la matriz en lugar de la concatenación, si es más apropiado para su tipo de datos.

11

También puede probar la declaración CASO en lugar de SI

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

También puede utilizar la función de filtro como se describe here

0

escribí ahora ...

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 
Cuestiones relacionadas