Я бы поработал с массивом для этого.Начните с определения размера, чтобы он соответствовал всему источнику:
Dim results As Variant
ReDim results(1 To pWorkRng.Count)
Затем сохраните счетчик для индекса последнего элемента в этом массиве и напишите в этом индексе:
Dim currentIndex As Long
For Each rng In pWorkRng
If Not IsError(rng.Value) Then
If rng.Value = pValue Then
currentIndex = currentIndex + 1
results(currentIndex) = rng.Offset(0, pIndex - 1)
End If
End If
Next
Когдацикл завершится, вы получите все результаты до currentIndex
, а затем набор Empty
значений;обрезать массив с ReDim Preserve
:
ReDim Preserve results(1 To currentIndex)
И теперь вы можете вернуть строку со всеми результатами, используя String.Join
:
MYVLOOKUP = String.Join(results, ";")