Al intentar copiar la función de vlookup en VBA, lo mejor que se me ocurre es esto:
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
Funciona, pero es increíblemente lento (aproximadamente 100 veces más lento que la función de hoja de cálculo).
Parece que tal vez una forma de acelerarlo sería ordenar la matriz de búsqueda alfabéticamente y de alguna manera saltar a un punto posterior en la lista. No tengo experiencia aquí, pero parece que mirar cada celda individual para verificar si es igual al valor de búsqueda, antes de pasar a la siguiente celda no puede ser la forma más eficiente de hacerlo, y no puede ser cómo funciona la función vlookup real.
Si se pregunta "¿por qué no usar simplemente vlookup", estoy escribiendo un script en VBA que en un momento realiza algo similar a vlookup (aunque la situación específica es un poco más complicada y devuelve múltiples valores, no solo 1) . En lugar de pedirle a stackexchange que escribiera todo mi código, pensé en llegar al meollo del problema. Además, creo que esta pregunta será útil como referencia futura para muchas más personas que una sobre mi tarea específica.