基于 FAST VBA 的 vlookup 等效项

基于 FAST VBA 的 vlookup 等效项

尝试在 VBA 中复制 vlookup 的功能,我能想到的最好的方法是:

Function VBALOOKUP(LUcell As Variant, LUArray As Range, LUColi As Long, OutColi As Long) As Variant
    Dim Y() As Variant
    Dim X As Long
    'cycle through each cell in range and check if = to lookup cell then return value with same index in outcol
    Y = LUArray
    For X = LBound(Y) To UBound(Y)
        If LUcell = Y(X, LUColi) Then
            VBALOOKUP = Y(X, OutColi)
            Exit For
        End If
    Next X
    Erase Y
    End Function

它可以工作,但是速度非常慢(比工作表函数慢约 100 倍)。

似乎有一种加快速度的方法,即按字母顺序对查找数组进行排序,然后以某种方式跳转到列表中的后续位置?我在这方面没有专业知识,但似乎查看每个单元格以检查其是否等于查找值,然后再转到下一个单元格并不是最有效的方法,也不可能是实际的 vlookup 函数的工作方式。

如果您想知道“为什么不直接使用 vlookup”,我正在用 VBA 编写一个脚本,该脚本在某一时刻执行类似于 vlookup 的操作(尽管具体情况稍微复杂一些,并且返回多个值而不仅仅是 1)。与其让 stackexchange 为我编写所有代码,我更愿意直击问题的核心。此外,我相信这个问题将为更多人提供未来参考,而不仅仅是关于我的具体任务。

相关内容