Why is this lookup function slow?
如果在指定范围内找到单元格值,我编写了以下UDF函数以返回true,否则返回false:
1 2 3 4 5 6 7 8 9 10 11 12 | 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搜索更快?
这是提高速度的一种方法:
1 2 3 | Public Function findInRange(valueToFind As Variant, lookupRange As Range) As Boolean findInRange = Not IsError(Application.Match(valueToFind, lookupRange, 0)) End Function |
使用什么魔法使vlookup搜索更快?
- 用C语言编程
除非你绝对坚持用多边形填充(非文字意义上),excel已经内置了函数
您可以进一步将其修改为一个计算为
1 2 3 4 5 6 7 8 9 10 | 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 |
号
如果在范围内可以找到值,则返回
一般来说,如果你可以做一些没有循环的事情,通常意味着它更快
在大多数情况下(我甚至会说全部),内置函数都比VBA快。它们已经被编译并且是本机代码。
它们也可以在VBA不能使用的情况下使用多线程。所有这些效果都使它们的动作更快。你也不想重新发明轮子。所以我建议尽可能使用内置函数。