ФУНКЦИЯ ПОИСКА.
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 задает смещение относительно найденного значения (полож. число вверх/левую сторону).