Страницы: 1
RSS
Направление поиска в поискпоз
 
Добрый день. Пожскажите пож-ста. У меня проблема: мне необходимо найти каким будет первое непустое значение в заданом диапазоне, всего 2 типа ответов: open и close поиск осуществляется снизу вверх  
 
раньше я решал задачу поиска ближайщего значения таким образом ПОИСКПОЗ("CLOSE";C17:C130;0), однако тогда мне нужно было искать ближайщее значение сверху вниз, а не наоборот.    
Ни одна из функций мне пока не помогла, облазил все сайт и все справки. Ексель упорно работает только сверху вниз. Спасайте, товарищи!  
п.с. макросы не желательны
 
А где тут направление? вы просто переписали мою формулу, или я не прав?:
 
"Первое непустое снизу" - это последнее заполненное, как я понимаю.  
Для диапазона B1:B11, ф-ла массива  
 
=ИНДЕКС(B1:B11;МАКС((B1:B11<>"")*СТРОКА(B1:B11)))
 
мне нужен поиск снизу вверх а не классический сверху вниз
 
Спасибо за вариант, Казанский  
повторил его у себя, вышло #ссылка  
=INDEX(C114:C131;MAX((C114:C131<>"")*ROW(C114:C131))) - оригинал
 
Прист, спасибо оргомное, пример расставил все точки, а то я про полную формулу  
=INDEX(A1:A30;MATCH("яяя";A1:A30)) даже и не подозревал)))    
мне помогло)))
 
Подскажите ещё пож-ста продолжение к теме  
если функция просматривает значения, которые выводятся по результатам функций, результат "" из функции =IF(E2="dlk";"CLOSE";"")    
считается за значение и наша формула нивидит следующее текстовое значение, нам очень важно чтобы в случае с "" значение считалось как пустое, а он упорно это отрицает, пока не удалишь формулу вовсе из ячейки....  
Что подскажете?
 
Моя формула работает в этом случае. Если диапазон начинается не с 1 строки, надо из второго аргумента INDEX вычесть номер предыдущей строки, например  
 
=INDEX(C114:C131;MAX((C114:C131<>"")*ROW(C114:C131))-113)  
или, чтобы сделать формулу перемещаемой  
=INDEX(C114:C131;MAX((C114:C131<>"")*ROW(C114:C131))-ROW(C113))  
 
И не забывайте вводить как формулу массива (Ctrl+Shift+Enter)
 
А можно с примером? как ни шаманю, все время знач и прочее((((
 
{quote}{login=Онотоле}{date=15.10.2010 07:14}{thema=}{post}А можно с примером? как ни шаманю, все время знач и прочее(((({/post}{/quote}Онотоле, пример-то как раз от Вас должен быть - а от нас решение.
 
Извиняюсь, вот выкладываю
 
{quote}{login=Онотоле}{date=15.10.2010 08:23}{thema=}{post}Извиняюсь, вот выкладываю{/post}{/quote}И что сделать-то надо?
 
<ЕСЛИ здесь протянуть формулу, то в ячейке L11 появится нужное значение, а так пусто>  
ЕСЛИ здесь протянуть формулу, то в ячейке L11 ничего не появится. Пусто.
 
Если надо, чтобы в столбце L всегда было последнее слово из столбца С, то можно так. Если нет, то нарисуй ручками что хочется.
 
Вполне естественно, что у Вас не выходит. Формула предложенная The_Prist возвращает последнюю позицию текстового значения в заданном диапазоне и так как строка нулевой длины (""), возвращаемая в результате работы формулы =IF(E2="dlk";"CLOSE";"") воспринимается Excel как текст, корректно она работать не будет.  
Но предложенный алгоритм является наиболее скоростным из известных (по моему скромному мнению), посему было бы глупо им не воспользоваться. Поэтому мое предложение:  
Формулу =IF(E2="dlk";"CLOSE";"") в столбце С заменить на =IF(E2="dlk";"CLOSE";0), тоесть вместо пустой строки выводить 0, а чтобы нули не мазолили глаза, можно для используемых ячеек столбца С назначить пользовательский формат "0;0;" и используйте дальше спокойно формулу: =INDEX(диапазон;MATCH("яяя";диапазон)).    
Хотя... можно в Вашем случае использовать: =LOOKUP("яяя";диапазон)
 
Кстати, хочется добавить: обнаружено интересное превращение функции ПРОСМОТР() из очень быстрой в черепаху, все зависит от того с чем данная функция работает - с реальным диапазоном или виртуальным массивом...
 
{quote}{login=kim}{date=16.10.2010 04:26}{thema=}{post}Кстати, хочется добавить: обнаружено интересное превращение функции ПРОСМОТР() из очень быстрой в черепаху, все зависит от того с чем данная функция работает - с реальным диапазоном или виртуальным массивом...{/post}{/quote}  
Если не сложно, можно увидеть пример?  
Спасибо.
KL
 
Кирилл, сейчас сложно, завтра если можно :)  
Я так понимаю это возражение, и я должен обосновать?
 
{quote}{login=DV}{date=16.10.2010 04:05}{thema=}{post}Если надо, чтобы в столбце L всегда было последнее слово из столбца С, то можно так. Если нет, то нарисуй ручками что хочется.{/post}{/quote}  
 
Несмотря на мои сумбурные фразы и неточные высказывания вы тонко уловили суть проблемы)))) спасибо, все теперь работает. Всему форуму огромный респект, не ожидал такого большого внимания к простому юзеру))))
 
Кирилл, того файла, где делал замеры  и были другие формулы к сожалению не нашел, в нем показатели были еще хуже. Сваял новый.
 
Случайно заглянул и стало интересно, а вот "9E+302" это максимальное кол-во цифр в экселе? )) и данными скобками {"яяя";9E+302} обозначается "или" или "и"?  я имею ввиду символ {}. Спасибо!
"
 
{quote}{login=Noldor}{date=16.10.2010 05:28}{thema=}{post}"9E+302" это максимальное кол-во цифр в экселе? )) и данными скобками {"яяя";9E+302} обозначается "или" или "и"?  я имею ввиду символ {}. Спасибо!{/post}{/quote}  
1. Это просто большое число. Чаще пользуются 9E+307. Оно ещё больше :-)  
2. {} - такими скобками обозначают массив.
 
{quote}{login=kim}{date=16.10.2010 05:15}{thema=}{post}Кирилл, сейчас сложно, завтра если можно :)  
Я так понимаю это возражение, и я должен обосновать?{/post}{/quote}  
Нет конечно, сомнение.    
 
Спасибо за пример. Честно говоря, я не увидел подтверждения тезису: "...все зависит от того с чем данная функция работает - с реальным диапазоном или виртуальным массивом".    
 
Единственное, что бросается в глаза, это следуещее:  
 
1) ИНДЕКС(...,МАКС(...)) по определению быстрее ПОИСКПОЗ()  
 
2) конструкция    
=ЕСЛИ((B1:B1000=0)*ЕЧИСЛО(A1:A1000);СТРОКА(B1:B1000))    
несколько быстрее конструкции    
A1:A1000/(B1:B1000=0)  
несмотря на то, что вторая короче.  
 
3) в отличие от ИНДЕКС(...;МАКС(...)), время пересчета ПОИСКПОЗ() варьирует в зависимости от расположения искомого значения, т.ч. формирование значений в столбце [B1:B1000] с помощью СЛЧИСЛ() не позволяет увидеть фиксированную картину происходящего.
 
Резюмируя, не вижу оснований считать, что ПОИСКПОЗ() ищет в виртуальных диапазонах медленнее, чем в реальных. Скорее наоборот. Сравните скорость пересчета:  
 
=ПОИСКПОЗ(9E+307;C1:C1000)  
где в диапазоне [C1:C1000] использована формула =A1/(B1=0)
 
и  
 
=ПОИСКПОЗ(9E+307;{...})  
где {...} - те же значения [C1:C1000], но в константе массива.
KL
 
Пардон, одна фраза в конце превратило все в бессмыслицу :) Вместо "скорее наоборот.", нужно читать "Скорее это можно доказать вот так:"
KL
Страницы: 1
Читают тему
Наверх