FAST VBA baseado em vlookup equivalente

1

Tentando copiar a função do vlookup no VBA, o melhor que posso fazer é:

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, mas é incrivelmente lento (cerca de 100x mais lento que a função da planilha).

Parece que talvez uma maneira de acelerá-lo seria classificar o array de pesquisa alfabeticamente e, de alguma forma, ir para um ponto posterior na lista? Eu não tenho nenhum conhecimento aqui, mas parece que olhando para cada célula individual para verificar se é igual ao valor de pesquisa, antes de ir para a próxima célula simplesmente não pode ser a maneira mais eficiente de fazê-lo, e não pode ser como funciona a função vlookup real.

Se você está se perguntando "por que não apenas usar vlookup", estou escrevendo um script em VBA que em um ponto executa algo semelhante a um vlookup (embora a situação específica seja um pouco mais complicada e retorna vários valores não apenas 1). Em vez de pedir stackexchange para escrever todo o meu código para mim, achei que chegaria ao cerne da questão. Além disso, acredito que esta pergunta será útil para referência futura para muito mais pessoas do que uma sobre minha tarefa específica.

    
por Some_Guy 22.09.2016 / 11:59

0 respostas