为什么此查找功能慢?

时间:2018-08-02 11:59:42

标签: excel vba excel-vba

我编写了以下UDF函数,如果在指定范围内找到一个单元格值,则返回True,否则返回False:

Function find_in_range(value_to_find As Variant, lookup_range As Range) As Boolean

For Each cell In lookup_range.Cells.SpecialCells(xlConstants)
    If cell.Value = value_to_find Then
        find_in_range = True
        Exit For
    Else
        find_in_range = False
    End If
Next cell

End Function

但是,它比说VLOOKUP慢得多。

为什么会这样?有没有办法使其更快?什么魔术可以使VLOOKUP搜索更快?

3 个答案:

答案 0 :(得分:2)

这是一种使其速度更快的方法:

Public Function findInRange(valueToFind As Variant, lookupRange As Range) As Boolean
    findInRange = Not IsError(Application.Match(valueToFind, lookupRange, 0))
End Function

什么方法使VLOOKUP搜索更快?

  • 用C编程

答案 1 :(得分:1)

在大多数情况下,内置函数比VBA更快(我什至要说全部)。它们已经被编译为本地代码。

他们还可以在VBA无法使用的地方使用多线程。所有这些效果使它们的动作快得多。同样,您也不想重新发明轮子。因此,我建议尽可能使用内置函数。

答案 2 :(得分:1)

除非您绝对坚持使用(从非字面意义上来说),否则excel已经具有内置函数Find,如果找到,该函数将返回Range或{ {1}}(如果没有)

您可以将其进一步修改为一个计算为Nothing

的函数
Boolean

如果可以在范围内找到值,则返回Option Explicit Function isFound(ByVal value_to_find As String, ByVal in_range as Range) As Boolean If in_range.Find(value_to_find, lookin:= xlValues) Is Nothing Then isFound = False Else isFound = True End If End Function ,否则返回true


通常,如果您可以无循环地执行某项操作,这通常意味着它会更快