Страница 1 из 1

ВПР поиск в обратном порядке

Добавлено: 14 апр 2013, 10:14
pppmaxa
Можно ли осуществить сопоставление с помощью функции ВПР в обратном порядке, с конца таблицы?

Re: ВПР поиск в обратном порядке

Добавлено: 14 апр 2013, 11:02
pashulka
Формально нет, но если таблица неотсортирована, то Вы можете попробовать вариант без использования необязательного аргумента Диапазон_просмотра
или написать пользовательскую функцию, в которой, для поиска снизу вверх, будет применяться метод .Find об'екта Range, только не стоит забывать, что вызывать такую UDF из ячеек рабочего листа, имеет смысл только начиная с версии XP(2002)

Re: ВПР поиск в обратном порядке

Добавлено: 14 апр 2013, 12:39
pppmaxa
Знания о VBA по прежнему отсутствуют. Можете помочь в написании и использовании функции?

Re: ВПР поиск в обратном порядке

Добавлено: 14 апр 2013, 13:15
pashulka

Код: Выделить всё

'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;ЛОЖЬ)

Re: ВПР поиск в обратном порядке

Добавлено: 14 апр 2013, 13:28
pashulka
P.S. Разумеется, вместо вышеопубликованной функции, можно использовать и формулы, однако последние не будут столь лаконичные как UDF (конечно, если мы не "схитрим" и не присвоим формуле имя)

Re: ВПР поиск в обратном порядке

Добавлено: 08 фев 2016, 01:56
@Nik
А вот и можно :-)
Если данные располагаются в диапазоне 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

Re: ВПР поиск в обратном порядке

Добавлено: 08 фев 2016, 07:22
pashulka
@Nik писал(а):А вот и можно :-)
Где в Вашем решении наличествует ВПР ?


P.S. Если же говорить о решении с помощью формул, то можно вспомнить формулу массива :

{=ИНДЕКС(C1:C100;МАКС((A1:A100="Искомый_текст")*СТРОКА(A1:A100)))}

Re: ВПР поиск в обратном порядке

Добавлено: 08 фев 2016, 12:17
@Nik
Тоже верно :) и формула нелетучая