Последнее входждение в массив

Автор IKor, 11.05.2011, 16:34

« назад - далее »

IKor

Коллеги,
Передо мной стоит задача поиска значения массива, соответствующего последнему входждению ключевого элемента в массив.
Функции ПОИСКПОЗ() и ВПР(_) решают аналогичную задачу, но для первого вхождения ключевого элемента.

Я решил задачу при помощи дополнительного столбца - смотрите прилагаемый файл.
Есть ли у кого-нибудь мысли как можно упростить решение: обойтись без доп. столбца и, желательно :) без функций массива, т.к. они не любят работать с целым_столбцом.

Serge 007

Цитата: IKor от 11.05.2011, 16:34
обойтись без доп. столбца и, желательно :) без функций массива, т.к. они не любят работать с целым_столбцом.
Без доп столбца легко  -
=ИНДЕКС($B$3:$B$23;МАКС(ЕСЛИ(F3=$A$3:$A$23;СТРОКА($1:$21))))
А вот без формул массива сложнее.

ЗЫ А что за ограничения по работе с целым столбцом? Я с таким не сталкивался...
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

MCH

еще вариант:
=ПРОСМОТР(2;1/($A$3:$A$23=F3);$B$3:$B$23)

Andrey Lenets

Цитата: Serge 007 от 11.05.2011, 17:23
ЗЫ А что за ограничения по работе с целым столбцом? Я с таким не сталкивался...
ОЧЕНЬ низкая производительность

kimtan

Отсортировать столбец A по возрастанию.
Webmoney: E350157549801 Z116603216205 R268084006579

Serge 007

Цитата: Andrey Lenets от 11.05.2011, 21:19
Цитата: Serge 007 от 11.05.2011, 17:23
ЗЫ А что за ограничения по работе с целым столбцом? Я с таким не сталкивался...
ОЧЕНЬ низкая производительность
Про это я в курсе :)
Я спрашиваю про ОГРАНИЧЕНИЯ.
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

Serge 007

Цитата: MCH от 11.05.2011, 18:18
еще вариант:
=ПРОСМОТР(2;1/($A$3:$A$23=F3);$B$3:$B$23)
А, да :)
Я это называю "способ DV" :)

Никак не могу к нему привыкнуть...
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

kimtan

#7
Цитата: Serge 007 от 11.05.2011, 21:45
Я спрашиваю про ОГРАНИЧЕНИЯ.
Видимо у автора 2003 Excel... а там ограничения на целый столбец.
Причем неважно чем формируется массив, тремя клавишами или функциями создающими массивы (СУММПРОИЗВ(), ПРОСМОТР() и т.д.)
Webmoney: E350157549801 Z116603216205 R268084006579

Serge 007

Цитата: kimtan от 11.05.2011, 21:56
Цитата: Serge 007 от 11.05.2011, 21:45
Я спрашиваю про ОГРАНИЧЕНИЯ.
Видимо у автора 2003 Excel... а там ограничения на целый столбец.
Игорь, не томи :)
Что за ограничения?
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

IKor

#9
Большое спасибо всем откликнувшимся.

Особенно для меня интересен второй предложенный способ - он должен работать быстрее.

К сожалению, они оба отказываются работать с целыми_столбцами (дома у меня действительно установлен MSExcel 2000)
Но второй вариант допускает возможность поиграть с динамически расширяемыми диапазонами, что для меня тоже подходит.

=ПРОСМОТР(2;1/(СМЕЩ($A$2;1;0;СЧЁТЗ($A:$A);1)=F3);СМЕЩ($A$2;1;1;СЧЁТЗ($A:$A);1))
Правда придется вниматьельно следить за пропусками строк в таблице :(

Относительно органичений по работе с целыми столбцами:
В MSExcel 2000 эти функции возвращают ошибку, если им попыпаться скормить целый_столбец в качестве рабочего диапазона.

Так как мой файл предназначен для работы со многими пользователями, то лучше подстраховаться...

P.S. Сортировать по столбцу - не подходит по условиям задачи... :) - тем более, что это не слишком сильно упростит решение...

kimtan

#10
Формулы в 2003 не могут обработать целый столбец в качестве массива.
=ПРОСМОТР(2;1/(СМЕЩ($A$2;1;0;СЧЁТЗ($A:$A);1)=F3);СМЕЩ($A$2;1;1;СЧЁТЗ($A:$A);1))
Желательно заменить на:
=ПРОСМОТР(2;1/($A$2:ИНДЕКС(A:A;ПОИСКПОЗ("яяя";A:A))=F3);$B$2:ИНДЕКС(B:B;ПОИСКПОЗ("яяя";A:A)))
Webmoney: E350157549801 Z116603216205 R268084006579

IKor

Хорошая идея.
Тем более, что саму конструкцию ПОИСКПОЗ("яяя";A:A) можно спрятать в именнованный диапазон и не высчитывать для каждой строки заново...

kimtan

#12
Так наверное будет наиболее оптимально
Webmoney: E350157549801 Z116603216205 R268084006579