2009-10-01 4 views
15

Come si può ottenere:Imitando l'operatore "IN"

if X in (1,2,3) then 

invece di:

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

In altre parole, come si può meglio imitare l'operatore IN in VBA per Excel?

risposta

13

Non penso che ci sia una soluzione molto elegante.

Tuttavia, si potrebbe provare:

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

o si potrebbe scrivere la propria funzione:

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

Non potresti semplicemente evitare la funzione e usare qualcosa come: 'InStr (1, "MeYouDogBoo", x) '? – redOctober13

+0

@ redOctober13 questo potrebbe funzionare se si separano gli elementi dell'elenco con un delimitatore che non può essere trovato in x. Altrimenti, YouDo attiverà InStr. – mrdaddychops

3

Hai provato

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

Questo dovrebbe funzionare. –

+0

Ricevo "sub o funzione non definita" - non so se questo è dovuto al fatto che sono in VBA (non VB)? ho modificato la domanda ... –

+0

È la funzione VBA di accesso. Scusa se non ho visto che hai citato Excel VBA. – THEn

1

C'è nessuno che io sappia .

Io di solito uso un inArray() Funzione fatta in casa come quello di http://www.freevbcode.com/ShowCode.asp?ID=1675

Si potrebbe anche fare una versione che consente di scorrere la matrice, invece di concatenare, se questo è più opportuno il tipo di dati.

11

Si potrebbe anche provare l'affermazione CASE invece di 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

È inoltre possibile utilizzare la funzione di filtro come descritto here

0

ho scritto adesso ...

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