0

我正在构建一个非常复杂的 VBA 工作簿,运行大部分代码的问题之一是性能。我有一个内置函数,或多或少,以下

Public Function zzz (xxx as String) as String
if xxx = "apple" then zzz = "orange"
if xxx = "appple2" then zzz = "orange2"
if xxx = "apple3" then zzz = "apple3"

等等(但用大约 30 个字符串代替)。我多次调用这个函数。有一个更好的方法吗?

4

3 回答 3

1

您可以使用数组和WorksheetFunction.Match. 这将是这样的:

Public Function zzz(xxx As String) As String
    Dim funInput As Variant
    Dim funOutput As Variant
        funInput = Array("apple", "apple2", "apple3")   
        'above array- add additional input elements and...
        '...match them with resulting items in below array
        funOutput = Array("orange", "orange2", "apple3") '

    zzz = funOutput(Application.Match(xxx, funInput, 0) - 1)
End Function

VBA中函数的示例调用:

Debug.Print zzz("apple2")

将导致:

orange2
于 2013-06-20T20:49:29.083 回答
1

几乎不。对于 30 个字符串,这应该不会太慢。

性能问题可能在其他地方,尤其是在您直接与工作簿交互的地方。在随机尝试更新代码之前尝试测量各种过程的时间。

很多行并不意味着性能缓慢。并非每一行都需要相同的时间来执行。

于 2013-06-20T20:31:44.390 回答
1

如果您只检查一个变量的值,您可以尝试使用 Select Case。这会更快,因为一旦找到正确的变量,它将跳过剩余的行。

Select case xxx
case "apple"
zzz = "orange"
case "apple2"
zzz = "orange2"
case "apple3"
zzz = "orange3"
End Select
于 2013-06-20T20:56:27.983 回答