尝试在 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 为我编写所有代码,我更愿意直击问题的核心。此外,我相信这个问题将为更多人提供未来参考,而不仅仅是关于我的具体任务。