VBA - 不区分大小写

时间:2016-12-02 03:13:25

标签: performance vba

我测试了比较速度:

Dim counter As Long

区分大小写的二进制比较(默认):0,016秒:

For counter = 1 To 100000
    If InStr("This is macro speed test", "macro") > 0 Then
    End If
Next counter

与案例转换不区分大小写:0,068秒:

For counter = 1 To 100000
    If InStr(UCase("This is macro speed test"), "MACRO") > 0 Then
    End If
Next counter

不区分大小写的vbtext比较:0,08秒:

For counter = 1 To 100000
    If InStr(1, "This is macro speed test", "MACRO", vbTextCompare) > 0 Then
    End If
Next counter

我想知道为什么文本比较在这个测试中表现不佳,我看到有人在论坛上推荐它#"慢" UCase或LCase转换。

是否有更快的方法进行不区分大小写的比较?

1 个答案:

答案 0 :(得分:0)

当我运行时:

Sub test()
    Dim counter As Long
    Dim start As Double, elapsed As Double

    start = Timer
    For counter = 1 To 100000
        If InStr("This is macro speed test", "macro") > 0 Then
        End If
    Next counter
    elapsed = Timer - start
    Debug.Print "1: " & elapsed

    start = Timer
    For counter = 1 To 100000
        If InStr(UCase("This is macro speed test"), UCase("macro")) > 0 Then
        End If
    Next counter
    elapsed = Timer - start
    Debug.Print "2: " & elapsed

    start = Timer
    For counter = 1 To 100000
        If InStr(1, "This is macro speed test", "macro", vbTextCompare) > 0 Then
        End If
    Next counter
    elapsed = Timer - start
    Debug.Print "3: " & elapsed

End Sub

我得到这样的输出:

1: 0.0078125
2: 0.0703125
3: 0.078125

2)和3)之间的差异缩小到无足轻重。似乎你的第二个代码使用了目标“MACRO”是大写的,其中第三种方法没有假设第三个参数的情况(因此可能在幕后将它们转换为大写或小写) 。

我多次运行你的原始代码,并确认第二次超过三分之一似乎确实存在持久的虽然有轻微的速度优势,这表明如果你在固定的字符串上检查大量的字符串已知的情况,然后转换到该情况并使用不区分大小写的搜索稍微好于使用vbTextCompare进行不区分大小写的搜索,虽然差异很小,但不太可能产生任何可察觉的差异。