1

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

0