ФУНКЦИЯ ПОИСКА.
Function ВПР_ПОИСК(AB1 As String, AB2 As Range, AB3 As Range)
Dim x As Long
Dim y As Long
'AB1-Искомое значение AB1
'AB2-Диапозон поиска AB2(x).Value
'AB3-Диапозон вывода AB3(x).Value
AB1=LCase(AB1)
For x = 1 To AB2.Count
'ПОИСК
For y = 1 To Len(AB2(x).Value)
If Mid(LCase(AB2(x).Value), y, Len(AB1)) = AB1 Then ВПР_ПОИСК= AB3(x).Value: Exit For
Next y
Next x
End Function
Пример:
ДИАПОЗОН :
ПОИСК :
ФУНКЦИЯ ПОИСКА С СУММИРОВАНИЕМ ИСКОМЫХ ЗНАЧЕНИЙ.
Function ВПР_ПОИСК_СУММ(AB1 As String, AB2 As Range, AB3 As Range, AB4 As Long)
Dim x As Long
Dim y As Long
'AB1-Искомое значение AB1
'AB2-Диапозон поиска AB2(x).Value
'AB3-Диапозо вывода AB3(x).Value
'AB4-Как складывать 0-арифметически 1-логически
AB1=LCase(AB1)
For x = 1 To AB2.Count
'ПОИСК
For y = 1 To Len(AB2(x).Value)
If Mid(LCase(AB2(x).Value), y, Len(AB1)) = AB1 Then
If AB4 = 0 Then
ВПР_ПОИСК_СУММ = ВПР_ПОИСК_СУММ + AB3(x).Value
Else
ВПР_ПОИСК_СУММ = ВПР_ПОИСК_СУММ & AB3(x).Value & " +"
End If
End If
Next y
Next x
End Function
Пример:
ДИАПОЗОН :
ПОИСК :
ФУНКЦИЯ ПОИСКА С СМЕЩЕНИЕМ.
Function ВПР_СМЕЩ(AB1 As String, AB2 As Range, AB3 As Range, AB4 As Long)
Dim x As Long
Dim y As Long
'AB1-Искомое значение AB1
'AB2-Диапозон поиска AB2(x).Value
'AB3-Диапозон вывода AB3(x).Value
'AB4-Смещение
AB1 = LCase(AB1)
For x = 1 To AB2.Count
For y = 1 To Len(AB2(x).Value)
If Mid(LCase(AB2(x).Value), y, Len(AB1)) = AB1 Then ВПР_СМЕЩ = AB3(x - AB4).Value: Exit For
Next y
Next x
End Function
P.S. В отличие от стандартной функции "ВПР=", поиск происходит в тексте не совпадающим с искомым значением. В случае функции "ВПР_ПОИСК_СУММ=" выводяться все найденные значения через "+", а не первое найденное как в стандартной функции. При необходимости можно выбрать арифметическое сложение (AB4=0) или логическое(AB4=1). В функции ВПР_СМЕЩ переменная АВ4 задает смещение относительно найденного значения (полож. число вверх/левую сторону).