2009-10-01 38 views
15

如何才能實現:代替模仿 「IN」 操作

if X in (1,2,3) then 

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

換句話說,怎樣才能最好的一個模仿IN運營商VBA爲Excel?

回答

13

我不認爲有一個非常優雅的解決方案。

但是,你可以嘗試:

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

,或者你可以寫自己的函數:

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

難道你不能只是避免功能,並使用類似: 'InStr( 1, 「MeYouDogBoo」,x)的'? – redOctober13

+0

@ redOctober13如果使用在x中找不到的分隔符分隔列表項,這可能會起作用。否則,YouDo會觸發InStr。 – mrdaddychops

3

你嘗試

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

這應該工作。 –

+0

我得到「子或功能未定義」 - 不知道這是因爲我在VBA(不是VB)?已編輯該問題... –

+0

它是Access VBA功能。對不起,我沒有看到你提到的Excel VBA。 – THEn

11

你也可以嘗試CASE語句而不是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

您也可以作爲描述here

0

使用過濾功能我現在寫的......

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