2009-10-01 7 views
15

Jak można osiągnąć:Naśladując "IN" operator

if X in (1,2,3) then 

zamiast:

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

Innymi słowy, w jaki sposób można najlepiej naśladować operatora IN w VBA dla Excela?

Odpowiedz

13

Nie sądzę, że istnieje bardzo eleganckie rozwiązanie.

jednak można spróbować:

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

lub można napisać własną funkcję:

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

Nie można po prostu uniknąć funkcji i użyć czegoś takiego: 'InStr (1, "MeYouDogBoo", x) '? – redOctober13

+0

@ redOktober13 może to działać, jeśli oddzielisz elementy listy ogranicznikiem, którego nie można znaleźć w x. W przeciwnym razie YouDo uruchomi InStr. – mrdaddychops

3

próbowałaś

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

To powinno zadziałać. –

+0

Otrzymuję "sub lub funkcja nie zdefiniowana" - nie wiem, czy to dlatego, że jestem w VBA (nie VB)? edytowałem pytanie ... –

+0

Jest to funkcja Access VBA. Niestety nie widziałem, że wspomniałeś o programie Excel VBA. – THEn

11

Można również spróbować oświadczenie zamiast 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

Można również skorzystać z funkcji filtrowania jak opisano here

0

pisałem go teraz CASE ...

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