8

我正在用 vba 写一个条件语句,比如

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

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

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

谢谢

4

5 回答 5

10

另一种选择是:

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

它很好地传达了if ... then ... else结构的含义。

于 2013-07-09T16:52:29.037 回答
5

另一种方式

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

过滤器返回一个匹配的数组。如果没有匹配,ubound = -1。

于 2013-07-09T19:22:25.920 回答
4

您可以Application.Match在数组上使用该函数:

If Not IsError(Application.Match(userID, Split("1,2,3,4",","))) Then...
于 2013-07-09T16:46:09.753 回答
0

CW,因为这与假设的示例相匹配,但不太可能是真实的使用情况。但是,Like要知道是一个很好的关键字。

If userID Like "[1-6]" Then

这对于单个数字检查是可以的,但对于现实世界的多字符用户 ID 则不行。

IE

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

userID = 11
If userID Like "[1-6]" Then ' result is False
于 2013-07-09T19:48:57.687 回答
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!"
于 2021-03-07T01:46:46.090 回答