高速 VBA ベースの vlookup 相当

高速 VBA ベースの vlookup 相当

VBA で vlookup の関数をコピーしようとすると、次のような最善の方法が思いつきます。

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 にすべてのコードを書くように依頼するのではなく、問題の核心に迫ろうと思いました。さらに、この質問は、私の特定のタスクに関する質問よりも、より多くの人にとって将来の参考になると思います。

関連情報