VBA相当于SQL'in'函数

时间:2013-07-09 16:41:28

标签: vba

我在vba中编写条件语句,如

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

我想知道是否有更快,更清洁的方法来做到这一点。像

这样的东西
if(userID in (1,2,3,4)) then
...

由于

5 个答案:

答案 0 :(得分:10)

另一种选择是:

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

它传达了if ... then ... else构造的意义。

答案 1 :(得分:5)

另一种方式

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

Filter返回一个匹配的数组。如果没有匹配,则ubound = -1。

答案 2 :(得分:4)

您可以在阵列上使用Application.Match功能:

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

答案 3 :(得分:0)

CW 因为这符合假设的示例,但不太可能是真实的使用情况。但是,Like是一个很好的关键字。

If userID Like "[1-6]" Then

这适用于单位数检查,但不适用于真实世界的多字符用户ID。

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

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

答案 4 :(得分:0)

你可以做一个这样的基本功能:

Function InArray(Match, SourceArray)
    InArray = False
    For i = LBound(SourceArray) To UBound(SourceArray)
        If SourceArray(i) = Match Then
            InArray = True
            Exit Function
        End If
    Next
End Function

然后你可以说:

if InArray(userId, array(1,2,3,4)) then msgbox "Found it!"