ВПР поиск в обратном порядке
Модератор: Naeel Maqsudov
Можно ли осуществить сопоставление с помощью функции ВПР в обратном порядке, с конца таблицы?
Формально нет, но если таблица неотсортирована, то Вы можете попробовать вариант без использования необязательного аргумента Диапазон_просмотра
или написать пользовательскую функцию, в которой, для поиска снизу вверх, будет применяться метод .Find об'екта Range, только не стоит забывать, что вызывать такую UDF из ячеек рабочего листа, имеет смысл только начиная с версии XP(2002)
или написать пользовательскую функцию, в которой, для поиска снизу вверх, будет применяться метод .Find об'екта Range, только не стоит забывать, что вызывать такую UDF из ячеек рабочего листа, имеет смысл только начиная с версии XP(2002)
Знания о VBA по прежнему отсутствуют. Можете помочь в написании и использовании функции?
Код: Выделить всё
'Microsoft Excel XP(или старше)
Public Function MyVLookUp(Search$, Source As Range, Column%, _
Optional DownSearch As Boolean = True) As Variant
Dim iCell As Range
If DownSearch = True Then
Set iCell = Source.Columns(1).Find(Left(Search, 255), _
Source(Source.Rows.Count, 1), xlValues, xlWhole, , xlNext)
Else
Set iCell = Source.Columns(1).Find(Left(Search, 255), _
Source(1, 1), xlValues, xlWhole, , xlPrevious)
End If
If Not iCell Is Nothing Then
MyVLookUp = iCell(1, Column)
Else
MyVLookUp = CVErr(xlErrNA)
End If
End Function
=MyVLookUp("Искомый_текст";A1:C100;2)
=MyVLookUp(Адрес_или_имя_ячейки;A1:C100;3)
для поиска снизу вверх достаточно использовать последний и необязательный аргумент DownSearch, т.е.
=MyVLookUp("Искомый_текст";A1:C100;2;0)
=MyVLookUp(Адрес_или_имя_ячейки;A1:C100;3;ЛОЖЬ)
P.S. Разумеется, вместо вышеопубликованной функции, можно использовать и формулы, однако последние не будут столь лаконичные как UDF (конечно, если мы не "схитрим" и не присвоим формуле имя)
А вот и можно :-)
Если данные располагаются в диапазоне A1:A10, то формула обратного поиска для чисел будет такой:
{=ПОИСКПОЗ(искомое_значение;Ч(СМЕЩ($A$10;-(СТРОКА(A1:A10)-СТРОКА($A$1)); ));0)}
{=ПОИСКПОЗ(искомое_значение;Ч(СМЕЩ($A$1;-(СТРОКА(A1:A10)-СТРОКА($A$10)); ));0)}
Для текста:
{=ПОИСКПОЗ("искомое_значение";Т(СМЕЩ($A$10;-(СТРОКА(A1:A10)-СТРОКА($A$1)); ));0)}
{=ПОИСКПОЗ("искомое_значение";Т(СМЕЩ($A$1;-(СТРОКА(A1:A10)-СТРОКА($A$10)); ));0)}
*формулы массива, вводится через Ctrl+Shift+Enter
Если данные располагаются в диапазоне A1:A10, то формула обратного поиска для чисел будет такой:
{=ПОИСКПОЗ(искомое_значение;Ч(СМЕЩ($A$10;-(СТРОКА(A1:A10)-СТРОКА($A$1)); ));0)}
{=ПОИСКПОЗ(искомое_значение;Ч(СМЕЩ($A$1;-(СТРОКА(A1:A10)-СТРОКА($A$10)); ));0)}
Для текста:
{=ПОИСКПОЗ("искомое_значение";Т(СМЕЩ($A$10;-(СТРОКА(A1:A10)-СТРОКА($A$1)); ));0)}
{=ПОИСКПОЗ("искомое_значение";Т(СМЕЩ($A$1;-(СТРОКА(A1:A10)-СТРОКА($A$10)); ));0)}
*формулы массива, вводится через Ctrl+Shift+Enter
Где в Вашем решении наличествует ВПР ?@Nik писал(а):А вот и можно :-)
P.S. Если же говорить о решении с помощью формул, то можно вспомнить формулу массива :
{=ИНДЕКС(C1:C100;МАКС((A1:A100="Искомый_текст")*СТРОКА(A1:A100)))}
Тоже верно и формула нелетучая