2009-10-01 32 views
15

Làm thế nào người ta có thể đạt được:Bắt chước "IN" Hành

if X in (1,2,3) then 

thay vì:

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

Nói cách khác, làm thế nào người ta có thể bắt chước tốt nhất các nhà điều hành IN trong VBA cho excel?

Trả lời

13

Tôi không nghĩ rằng có một giải pháp rất thanh lịch.

Tuy nhiên, bạn có thể thử:

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

hoặc bạn có thể viết chức năng riêng của bạn:

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

Bạn không thể chỉ cần tránh chức năng và sử dụng một cái gì đó như: 'InStr (1, "MeYouDogBoo", x) '? – redOctober13

+0

@ redOctober13 điều này có thể hoạt động nếu bạn tách các mục danh sách bằng dấu phân cách không thể tìm thấy trong x. Nếu không, YouDo sẽ kích hoạt InStr. – mrdaddychops

3

bạn đã thử

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

Điều này sẽ hoạt động. –

+0

Tôi nhận được "phụ hoặc chức năng không được xác định" - không biết nếu điều này là bởi vì tôi đang ở trong VBA (không VB)? đã chỉnh sửa câu hỏi ... –

+0

Đây là chức năng Truy cập VBA. Xin lỗi tôi đã không thấy rằng bạn đã đề cập excel VBA. – THEn

1

Có gì mà tôi biết về .

Tôi thường sử dụng một InArray() chức năng nhà ủ như một tại http://www.freevbcode.com/ShowCode.asp?ID=1675

Bạn cũng có thể tạo ra một phiên bản đó lặp qua mảng thay vì concatenating, nếu đó là thích hợp hơn để kiểu dữ liệu của bạn.

11

Bạn cũng có thể thử các tuyên bố TRƯỜNG HỢP thay vì NẾU

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

Bạn cũng có thể sử dụng chức năng lọc như mô tả here

0

Tôi đã viết nó bây giờ ...

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 
Các vấn đề liên quan