Относительно макроса vbalookup, упомянутого в ответе - PullRequest
0 голосов
/ 12 сентября 2018

В этом конкретном ответе относительно более быстрого пути vlookup - https://stackoverflow.com/a/18656809/8036266

Упоминается более быстрый способ vlookup, определяемый как vbalookup.Код для этого работает отлично.Однако он выполняется каждый раз, когда я меняю любую ячейку в книге.Может кто-нибудь сказать мне, в чем проблема может быть?

Function vbalookup(lookupRange As Range, refRange As Range, dataCol As Long) 
As Variant
Dim dict As New Scripting.Dictionary
Dim myRow As Range
Dim I As Long, J As Long
Dim vResults() As Variant

' 1. Build a dictionnary
For Each myRow In refRange.Columns(1).Cells
' Append A : B to dictionnary
dict.Add myRow.Value, myRow.Offset(0, dataCol - 1).Value
Next myRow

' 2. Use it over all lookup data
ReDim vResults(1 To lookupRange.Rows.Count, 1 To lookupRange.Columns.Count) 
As Variant
For I = 1 To lookupRange.Rows.Count
For J = 1 To lookupRange.Columns.Count
  If dict.Exists(lookupRange.Cells(I, J).Value) Then
    vResults(I, J) = dict(lookupRange.Cells(I, J).Value)
  End If
Next J
Next I

vbalookup = vResults
End Function

1 Ответ

0 голосов
/ 12 сентября 2018

Я использовал динамический диапазон, созданный по формуле смещения. Переопределение диапазона с использованием энергонезависимого подхода: использование индекса решило проблему. Другие динамические диапазоны, присутствующие в книге (не используемые в формуле vbalookup), также запускали макрос. Мне тоже пришлось их удалить.

Спасибо @ScottCraner, что нашли время для решения этой проблемы:)

...