Попытка скопировать функцию vlookup в VBA, лучшее, что я могу придумать, это:
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 написать весь мой код для меня, я подумал, что смогу разобраться в сути проблемы. Кроме того, я считаю, что этот вопрос будет полезен для дальнейшего использования многими людьми, чем кто-либо, касающийся моей конкретной задачи.