Страницы: 1
RSS
Анализ ряда данных. Работа функции ПРОСМОТР().
 
Здравствуйте! Столкнулся с задачей определения срока окупаемости. То есть существует ряд данных, имеющий один или несколько переходов в положительную область. Надо автоматически определять этот последний переход и провести по нему и соответствующим ячейкам расчеты. Долго бьюсь, но моих "знаний" не хватает...Заранее спасибо!
 
Определение числа:  
=ИНДЕКС(C2:K2;МАКС(ЕСЛИ(ЗНАК(B2:J2)<>ЗНАК(C2:K2);СТОЛБЕЦ(C:K)-2)))  
=ПРОСМОТР(2;1/(ЗНАК(B2:J2)<>ЗНАК(C2:K2));C2:K2)  
 
Первая - формула массива.  
Как вводить формулу массива:  
После введения формулы в ячейку, ввод завершается нажатием не просто Enter, а Ctrl+Shift+Enter. Формула при этом будет заключена в фигурные скобки - {}.
 
Задача, в данном примере, сделать что-то вроде впр находящего значение ячейки H2?  
(потому что после H2 нет отрицательный значений) Правильно?
 
vikttur, огромное спасибо, но они определяют первое неотрицательное значение, а скажите пожалуйста как туда впихнуть еще формулу расчета относительно этой ячейки. грубо говоря чтобы он определил эту ячейку, соответствующий год и соседнюю отрицательную. если последнее отрицательное можно по аналогии найти, то самая большая проблема в отсылке на соответствующий год...
 
Другой_ мне нужен расчет к любой вариативности, который бы считал при изменении исходных данных...
 
{quote}{login=vikttur}{date=22.05.2012 08:43}{thema=}{post}  
=ПРОСМОТР(2;1/(ЗНАК(B2:J2)<>ЗНАК(C2:K2));C2:K2)  
{/post}{/quote}  
Уважаемые знатоки, вы могли бы рассказать про формулу?  
 
Проследил цепочку формулы:  
ПРОСМОТР(2;1/{-1;-1;-1;0;1;-1;1;1;1}<>{-1;-1;0;1;-1;1;1;1;1}  
ПРОСМОТР(2;1/{ЛОЖЬ;ЛОЖЬ;ИСТИНА;ИСТИНА;ИСТИНА;ИСТИНА;ЛОЖЬ;ЛОЖЬ;ЛОЖЬ}  
ПРОСМОТР(2;{#ДЕЛ/0!;#ДЕЛ/0!;ИСТИНА;ИСТИНА;ИСТИНА;ИСТИНА;#ДЕЛ/0!;#ДЕЛ/0!;#ДЕЛ/0!}  
 
Но ведь в массиве нет двойки. Откуда берется ответ?  
И если поставить вместо 2 - 3 или 1 ответ будет тем же...
 
pahan-malygin, да просто меняете последний диапазон C2:K2 и получаете то что вам надо:  
=ПРОСМОТР(2;1/(ЗНАК(B2:J2)<>ЗНАК(C2:K2));C2:K2)  
=ПРОСМОТР(2;1/(ЗНАК(B2:J2)<>ЗНАК(C2:K2));B2:J2)  
=ПРОСМОТР(2;1/(ЗНАК(B2:J2)<>ЗНАК(C2:K2));B2:J2)
 
Другой_,vikttur вы спасли меня, огромное спасибо!!!!!! а к вопросу про логику формулы присоединяюсь
 
Тема сползает всё ниже и ниже, а любопытство, как работает формула так и не дает покоя.  
Просветите, люди знающие, по ПРОСМОТРУ.
 
ПРОСМОТР  
   
См. также  
 
Функция ПРОСМОТР имеет две синтаксические формы: вектор и массив.  
 
Вектор — это диапазон, который содержит только одну строку или один столбец. Векторная форма функции ПРОСМОТР просматривает диапазон, в который входят значения только одной строки или одного столбца (так называемый вектор) в поисках определенного значения и возвращает значение из другого столбца или строки. Эта форма функции ПРОСМОТР используется, когда требуется указать интервал, в котором находятся искомые значения. Другая форма функции ПРОСМОТР автоматически использует для этой цели первую строку или первый столбец.  
 
Синтаксис 1  
 
Векторная форма  
 
ПРОСМОТР(искомое_значение;просматриваемый_вектор;вектор_результатов)  
 
Искомое_значение     — это значение, которое функция ПРОСМОТР ищет в первом векторе. Искомое_значение может быть числом, текстом, логическим значением, именем или ссылкой, ссылающимися на значение.  
 
Просматриваемый_вектор     — интервал, содержащий только одну строку или один столбец. Значения в аргументе просматриваемый_вектор могут быть текстами, числами или логическими значениями.  
 
Важно.  Значения в аргументе просматриваемый_вектор должны быть расположены в порядке возрастания: ..., -2, -1, 0, 1, 2, ..., A-Z, ЛОЖЬ, ИСТИНА; в противном случае функция ПРОСМОТР может вернуть неверный результат. Тексты в нижнем и верхнем регистре считаются эквивалентными.  
 
Вектор_результатов    — интервал, содержащий только одну строку или один столбец. Он должен быть того же размера, что и просматриваемый_вектор.  
 
Заметки  
 
Если ПРОСМОТР не может найти искомое_значение, то подходящим считается наибольшее значение в аргументе просматриваемый_вектор, которое меньше, чем искомое_значение.    
Если искомое_значение меньше, чем наименьшее значение в аргументе просматриваемый_вектор, то функция ПРОСМОТР возвращает значение ошибки #Н/Д.    
Пример  
 
Чтобы этот пример проще было понять, скопируйте его на пустой лист.  
 
Инструкции    
 
Создайте пустую книгу или лист.    
Выделите пример в разделе справки. Не выделяйте заголовок строки или столбца.    
 
 
Выделение примера в справке.  
 
Нажмите сочетание клавиш CTRL+C    
На листе выделите ячейку A1 и нажмите сочетание клавиш CTRL+V.    
Чтобы переключиться между просмотром результатов и просмотром формул, возвращающих эти результаты, нажмите сочетание клавиш CTRL+` (апостроф) или в меню Сервис укажите на пункт Зависимости формул и выберите режим Режим проверки формул.    
     
1    
2    
3    
4    
5    
6    
A B    
Периодичность Цвет    
4,14 красный    
4,19 оранжевый    
5,17 желтый    
5,77 зеленый    
6,39 синий    
Формула Описание (результат)    
=ПРОСМОТР(4,91;A2:A6;B2:B6) Поиск 4,19 в столбце A и возвращение значения из столбца B, находящегося в той же строке (оранжевый)    
=ПРОСМОТР(5,00;A2:A6;B2:B6) Поиск 5,00 в столбце A и возвращение значения из столбца B, находящегося в той же строке (оранжевый)    
=ПРОСМОТР(7,66;A2:A6;B2:B6) Поиск 7,66 в столбце A, соотнесение со следующим наименьшим значением (6,39) и возвращение значения из столбца B, находящегося в той же строке (синий)    
=ПРОСМОТР(0;A2:A6;B2:B6) Поиск 0 в столбце A и возвращение сообщения об ошибке, т. к. ноль меньше наименьшего значения в просматриваемом векторе A2:A7 (#Н/Д)
 
про ПРОСМОТР(2;... подробно описано вот здесь:   
http://www.planetaexcel.ru/forum.php?thread_id=10983  
 
п.с. поиск таки рулит! :)
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Спасибо конечно за выдержки)  
Но справку читаем, и как работает ПРОСМОТР осведомлены.  
 
Вопрос был в следующем:  
{quote}{login=Другой_}{date=22.05.2012 09:16}{thema=}{post}ПРОСМОТР(2;{#ДЕЛ/0!;#ДЕЛ/0!;ИСТИНА;ИСТИНА;ИСТИНА;ИСТИНА;#ДЕЛ/0!;#ДЕЛ/0!;#ДЕЛ/0!}  
Но ведь в массиве нет двойки. Откуда берется ответ?  
{/post}{/quote}  
 
Кроме того покрутил формулу. Прикрепил во вложение.  
 
ВОПРОС:    
Каким образом находится не первый #ДЕЛ/0! идущий после ИСТИНА, а последний?  
Почему ПРОСМОТР выводит значение которое соответствует 1(Истина), в то время как по поиску стоит 2.  
 
Очень прошу помогите разъяснить! Во вложении примеры приведены и некоторые описания.
 
Спасибо конечно за выдержки)  
Но справку читаем, и как работает ПРОСМОТР осведомлены.  
 
Вопрос был в следующем:  
{quote}{login=Другой_}{date=22.05.2012 09:16}{thema=}{post}ПРОСМОТР(2;{#ДЕЛ/0!;#ДЕЛ/0!;ИСТИНА;ИСТИНА;ИСТИНА;ИСТИНА;#ДЕЛ/0!;#ДЕЛ/0!;#ДЕЛ/0!}  
Но ведь в массиве нет двойки. Откуда берется ответ?  
{/post}{/quote}  
 
Кроме того покрутил формулу. Прикрепил во вложение.  
 
ВОПРОС:    
Каким образом находится не первый #ДЕЛ/0! идущий после ИСТИНА, а последний?  
Почему ПРОСМОТР выводит значение которое соответствует 1(Истина), в то время как по поиску стоит 2.  
 
Очень прошу помогите разъяснить! Во вложении примеры приведены и некоторые описания.
 
{quote}{login=Другой_}{date=22.05.2012 09:16}{thema=}{post}Уважаемые знатоки, вы могли бы рассказать про формулу?{/post}{/quote}  
Вам целую статью из справки показали, там есть:  
"Если ПРОСМОТР не может найти искомое_значение, то подходящим считается наибольшее значение в аргументе просматриваемый_вектор, которое меньше, чем искомое_значение."  
Ищем 2 (знаем, что ее точно не будет, но ищем :) ), не находим... А последнее - это и есть "наибольшее..., которое меньшее..."
 
Спасибо что откликнулись.  
Я предположил, что ПРОСМОТР берет наибольшее значение. У меня больше вопросов возникло по вложенному файлу.  
 
Мне не объясняет каким образом получается, что он выдает не первое значение (ведь "просмотр" смотрит по порядку, ему же нужен отсортированный массив), а последнее значение.  
Вот например в таком варианте =ПРОСМОТР(7;{2;4;6;8;10;8;6;4;2};{1;2;3;4;5;6;7;8;9}) выдается третий элемент.  
Почему в приведенном мною примере не выдается значение голубого цвета - это же первое попадающееся значение после первой.  
 
И не понятно почему в прикрепленном мною втором примере при поиске "двойки" он выдает шестое значение которое равно "ИСТИНА" (-7)
 
<<при поиске "двойки" он выдает шестое значение которое равно "ИСТИНА" (-7)>>  
 
В примере стоит 1, а не двойка, поэтому и..  
 
<<..не выдается значение голубого цвета - это же первое попадающееся значение после первой.>>  
 
Он ищет последнюю единицу в массиве {#ДЕЛ/0!;1;#ДЕЛ/0!;1;#ДЕЛ/0!;1;#ДЕЛ/0!;#ДЕЛ/0!;#ДЕЛ/0!}
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Спасибо большое за то что просветили!  
Теперь всё ясно и понятно!  
 
(за единичку извиняюсь, пока экспериментировал, не уследил, что поменял значение)
 
Всё таки не ясно :))))))  
 
Вопросы по формуле, не стихают :) Помогите рассмотреть эти четыре формулы.  
 
ПРОСМОТР выдает то первое, то предпоследнее значение! Почему?  
(*У нас просматриваемый_вектор в формуле vikttur тоже не отсортированный)  
 
=ПРОСМОТР(7;{2;22;2;22;2;22;2;22;2};{1;2;3;4;5;6;7;8;9})  
выдает 7 (почему не 3 или почему не 9)?  
 
=ПРОСМОТР(7;{2;22;2;22;2;22;2;22;2;22;2};{1;2;3;4;5;6;7;8;9;10;11})  
выдает 3  
 
Может это должно быть корректнее с  нулем и единицей? Но там тоже глюки:  
 
=ПРОСМОТР(2;{1;0;0;1;0;0;1;0;1;0;1};{1;2;3;4;5;6;7;8;9;10;11})    
выдает 11 - почему не 10 выдало?  
 
=ПРОСМОТР(2;{1;0;0;1;0;0;1;0;1;0};{1;2;3;4;5;6;7;8;9;10})  
выдает 10 - тут выдает так как и сказал Владимир по принципу "последний в массиве".
 
Другой_, мне кажется, всё дело в невыполнении требований к данной функции.  
Цитата из справки:  
"Важно. Значения в аргументе просматриваемый_вектор должны быть расположены в порядке возрастания: ..., -2, -1, 0, 1, 2, ..., A-Z, ЛОЖЬ, ИСТИНА;    
в противном случае функция ПРОСМОТР может вернуть неверный результат."
 
Но ведь я же и написал "просматриваемый_вектор в формуле vikttur тоже не отсортированный"  
 
Там же работает! Вот я и хочу понять оно и там будет работать нестабильно потому что массив не отсортирован.    
Или всё-таки логика кая-то есть, но я её не улавливаю.
 
=ПРОСМОТР(2;1/(ЗНАК(B2:J2)<>ЗНАК(C2:K2));C2:K2)  
 
(ЗНАК(B2:J2)<>ЗНАК(C2:K2)) - массив из нулей и единиц. Нам нужно находить последнее значение, поэтому нули нужно как-то ликвидировать. Используем умение функции: 1/массив при делении на "0" выдаст ошибку, которую функция проигнорирует.  
Теперь в массиве нужно найти последнее значение. Ищем что-либо больше 1.  
Нашли? Берем значение из C2:K2.
 
Теперь понятно за счет чего работает.  
За счет того что ошибка игнорируется. Какой умный способ!
Страницы: 1
Читают тему
Наверх