2013-07-09 8 views
7

Piszę warunkowe oświadczenie w VBA jakVBA odpowiednikiem SQL „w” funkcji

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

Zastanawiałem się, czy istnieje szybsza, bardziej przejrzysty sposób to zrobić. Coś jak

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

Dzięki

+0

Szybsze pod względem wydajności lub mniej znaków kodu? –

+0

@mehow Mniej znaków. Moja lista będzie zawierała mniej niż 10 liczb do sprawdzenia, więc różnice w wydajności między metodami powinny być pomijalne. – Ben

Odpowiedz

10

Alternatywą byłoby:

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

Przekazuje bardzo dobry sens konstrukcja if ... then ... else.

4

Można użyć funkcji Application.Match na tablicy:

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

Czy 'IsError' nie potrzebuje'() 'w tym użyciu? – Gaffi

+0

Tak, robi. Dobry połów. Poprawiłem. –

5

Innym sposobem

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

Filtr zwraca tablicę z meczu. Jeśli nie ma dopasowania, ubound = -1.

0

CW ponieważ jest to zgodne z hipotetycznym przykładem, ale nie jest prawdopodobne, aby było prawdziwe. Warto jednak wiedzieć, że dobrym słowem kluczowym jest Like.

If userID Like "[1-6]" Then 

Jest to możliwe w przypadku czeków jednocyfrowych, ale nie w przypadku światowych, wieloznakowych identyfikatorów użytkowników.

tj

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

ale

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