Я слышал о новой функции XLOOKUP в некоторых тестовых версиях Excel.
Поскольку у меня ее нет, я хотел написать собственную, очень базовую c, реализацию XLOOKUP.
Код делает то, что я хочу, но, кажется, работает немного медленно. Я специально замечаю, что когда я автоматически заполняю функцию рядом со столбцом значений, она намного медленнее, чем встроенный vlookup.
Какие оптимизации можно сделать, чтобы исправить медлительность?
Я уже добавил
Application.DisplayAlerts = False
Application.Calculation = xlCalculateManual
Application.ScreenUpdating = False
, и это не имело никакого значения (Да, я возвращаю значения в конце).
Я полагаю, что больше ничего нельзя сделать; VLOOKUP (и все встроенные функции), вероятно, скомпилирован в C ++, и поэтому он работает так быстро.
Я также переключил свой WHILE l oop на For Each, и он показался немного медленнее.
Public Function XLOOKUP(ByVal LookUpVal As Variant, ByVal SourceRange As Range, ByVal ResultRange As Range) As Variant
Application.Volatile
Dim SrcRange As Variant
Dim RsltRange As Variant
Dim IterCount As Long
Dim ResultVal As Variant
SrcRange = SourceRange.Value
RsltRange = ResultRange.Value
IterCount = 1
If UBound(SrcRange, 1) > 1 Then
While (Not LookUpVal = SrcRange(IterCount, 1))
IterCount = IterCount + 1
Wend
If IterCount > UBound(SrcRange, 1) Then
ResultVal = 0
Else
ResultVal = RsltRange(IterCount, 1)
End If
Else
While (Not LookUpVal = SrcRange(1, IterCount))
IterCount = IterCount + 1
Wend
If IterCount > UBound(SrcRange, 2) Then
ResultVal = 0
Else
ResultVal = RsltRange(1, IterCount)
End If
End If
SrcRange = Empty
RsltRange = Empty
XLOOKUP = ResultVal
End Function