更快捷地使用If / Else条件

时间:2017-05-22 12:54:39

标签: excel excel-vba vba

我有多达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条件?

3 个答案:

答案 0 :(得分:1)

也许使用数组?

所以arr(1) = XXXXarr(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更改为您想要返回的元素