我有多达40个If / ElseIf条件,代码是:
If b = 1 Then
d = XXXX
ElseIf b = 2 Then
d = YYYY
ElseIf b = 3 Then
d = AAAA
ElseIf b = 40 Then
d = ZZZZ
End If
有没有更快的方法来做到这一点,所以我没有所有的If / ElseIf条件?
答案 0 :(得分:1)
也许使用数组?
所以arr(1) = XXXX
和arr(2) = YYYY
这样你可以
d = arr(b)
答案 1 :(得分:1)
最好的方法是索引一些数组。为了避免每次需要时创建数组,您可以使用关键字Static
声明它。这样,索引非常快(特别是对于较大的数组)。这是一种时空权衡:数组保留在内存中,但索引非常快。
在下文中,我创建了一个使用静态数组将索引转换为String
的函数。但请注意,您可能有兴趣通过将字符串放在一些隐藏的工作表中并从那里加载它们来使其更具动态性。
Function myString(ByVal index As Long) As String
Static ar As Variant ' <-- static: filled once and keeps valid between function calls
If IsEmpty(ar) Then ar = Array("XXXX", "YYYY", "AAAA", "ZZZZ")
myString = ar(index - 1)
End Function
Sub TestIt()
Debug.Print myString(1)
Debug.Print myString(4)
End Sub
答案 2 :(得分:1)
使用数组
请记住,默认情况下,数组已编入索引,但您可以覆盖它并在重新调整数组时使用所需的任何索引。
Dim MyArray()
Dim ind As Long
MyArray = Array("XXXX","YYYY","AAAA","ZZZZ")
ind = 2
MsgBox MyArray(ind)
这将返回第3个元素或AAAA
只需将ind更改为您想要返回的元素