SCHNELLES VBA-basiertes Vlookup-Äquivalent

SCHNELLES VBA-basiertes Vlookup-Äquivalent

Beim Versuch, die Funktion „vlookup“ in VBA zu kopieren, ist das Beste, was mir einfällt, Folgendes:

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

Es funktioniert, ist aber unglaublich langsam (etwa 100-mal langsamer als die Arbeitsblattfunktion).

Es scheint, als könnte man das Ganze beschleunigen, indem man das Lookup-Array alphabetisch sortiert und irgendwie zu einem späteren Punkt in der Liste springt. Ich bin hier kein Experte, aber es scheint, als wäre es nicht die effizienteste Methode, jede einzelne Zelle zu prüfen, um zu überprüfen, ob sie dem Lookup-Wert entspricht, bevor man dann zur nächsten Zelle geht, und so kann die eigentliche Vlookup-Funktion auch nicht funktionieren.

Wenn Sie sich fragen, „warum nicht einfach Vlookup verwenden“, ich schreibe ein Skript in VBA, das an einer Stelle etwas Ähnliches wie ein Vlookup ausführt (obwohl die konkrete Situation etwas komplizierter ist und mehrere Werte zurückgibt, nicht nur 1). Anstatt Stackexchange zu bitten, meinen gesamten Code für mich zu schreiben, dachte ich, ich würde zum Kern des Problems vordringen. Außerdem glaube ich, dass diese Frage für künftige Referenzen für viel mehr Leute hilfreich sein wird, als es eine Frage zu meiner konkreten Aufgabe wäre.

verwandte Informationen