我编写了以下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搜索更快?
答案 0 :(得分:2)
这是一种使其速度更快的方法:
Public Function findInRange(valueToFind As Variant, lookupRange As Range) As Boolean
findInRange = Not IsError(Application.Match(valueToFind, lookupRange, 0))
End Function
什么方法使VLOOKUP搜索更快?
答案 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
通常,如果您可以无循环地执行某项操作,这通常意味着它会更快