我在vba中编写条件语句,如
if(userID = 1 or userID = 2 or userID = 3 or userID = 4) then
...
我想知道是否有更快,更清洁的方法来做到这一点。像
这样的东西if(userID in (1,2,3,4)) then
...
由于
答案 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!"