2013-07-09 15 views
7

sto scrivendo un'istruzione condizionale in VBA comeVBA equivalente a SQL 'in' funzione

if(userID = 1 or userID = 2 or userID = 3 or userID = 4) then 
... 

Mi chiedevo se c'è un modo più veloce più pulito per fare questo. Qualcosa di simile

if(userID in (1,2,3,4)) then 
... 

Grazie

+0

più rapida in termini di meno caratteri o efficienza di codice? –

+0

@mehow Meno caratteri. La mia lista avrà meno di 10 numeri da controllare, quindi le differenze di rendimento tra i metodi dovrebbero essere trascurabili. – Ben

risposta

10

Un'alternativa sarebbe:

select case userID 
    case 1,2,3,4,5,6 
     ' do something 
end select 

Si trasmette molto bene il significato di il costrutto if ... then ... else.

4

è possibile utilizzare la funzione di Application.Match su un array:

If Not IsError(Application.Match(userID, Split("1,2,3,4",","))) Then... 
+1

Non c'è bisogno di 'IsError''() 'in questo utilizzo? – Gaffi

+0

Sì, lo fa. Buona pesca. Ho rivisto. –

5

altro modo

If UBound(Filter(Array(1, 2, 3, 4, 5, 6), UserID)) > -1 Then 

filtro restituisce un array con la partita. Se non c'è corrispondenza, ubound = -1.

0

CW perché corrisponde all'esempio ipotetico, ma non è probabile una situazione di utilizzo reale. Tuttavia, Like è una buona parola chiave da sapere.

If userID Like "[1-6]" Then 

Questo va bene per i controlli a una cifra, ma non per gli ID utente a più caratteri del mondo reale.

cioè

userID = 1 
If userID Like "[1-6]" Then ' result is True 

ma

userID = 11 
If userID Like "[1-6]" Then ' result is False