Страницы: 1
RSS
Поиск максимума при сложном условии
 
Здравствуйте! В прикрепленном файле в столбце:  
B - время с точностью до секунды  
С - данные за это время  
G - необходимо найти максимум за данную минуту  
 
Поискав на форуме, нашел близкую формулу {=МАКС(ЕСЛИ(D2=A:A;B:B))}. Однако в моем случае, как я понял, необходимо неравенство - что-то вроде =МАКС(ЕСЛИ(И(B:B>=E3;B:B<=F3);C:C)).  
Но почему-то так не работает.    
Подскажите, пожалуйста, как найти максимум за данную минуту.
 
попробуйте    
=МАКС(ЕСЛИ(($B$2:$B$20>E3)*($B$2:$B$20<=F3);$C$2:$C$20;""))  
Это формула массива, вводится одновременным нажатием 3х клавиш Контрол+Шифт+Энтер
 
Спасибо! То, что надо!  
P.S. Очень нравится этот сайт. Спасибо создателям и всем, кто внемлет просьбам страждущих)
 
Кстати, обратите внимание на ошибку в формуле с условием начала периода ($B$2:$B$20>E3)
 
Да, я заметил. Не страшно)
 
haemoglobin, вы меня заинтриговали...  
а что именно "не страшно"? что ваш вариант считал одно и то же граничное значение времени в разных диапазонах? вы, случаем, не программы для баллистических ракет сочиняете?
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
ikki, флудить не очень люблю
 
да, это большой недостаток.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
haemoglobin, Два последних сообщения перед моим - флуд.  
Сообщение ikki (26.08.2012, 21:30) таковым не считаю. В нем задан конкретный вопрос. То, что этот вопрос не в "траурной рамке" - плохо?
 
Ок, неважно. Важно то, что формула, предложенная Igor67  
{=МАКС(ЕСЛИ(($B$2:$B$20>E3)*($B$2:$B$20<=F3);$C$2:$C$20;""))}  
оказалась очень медленной. Это в прикрепленном файле у меня так мало данных, а на деле больше 100 тысяч строк, причем приходят они в реальном времени. Необходимо ускорить ее во много-много раз, либо заменить макросом, либо что-то еще. Помогите, пожалуйста.
 
И нужно показать максимумы за каждую минуту?  
Лучше макросом.  
Можно формулой. Насколько быстрее формулы массива? Не знаю, возможно, не намного.  
Доп. столбец:  
=ЦЕЛОЕ(B2*24*60)= - отобразится минута данного часа в числовом выражении.  
Можно использовать в дальнейших вычислениях.  
 
Если достаточно видеть максимум за конкретную минуту, то с доп. вычислениями будет намного быстрее. Добавить формулу в доп. столбец:  
=ЕСЛИ(дата>=низ;ЕСЛИ(дата<=верх);число)  
определение нужного:  
=МАКС(доп.столбец)
 
Вариант для многих максимумов
 
haemoglobin, конечно медленная, ведь просматриваются все данные и создается виртуальный массив в каждой формуле:)  
А про 100 тыс. строк и поступление данных по ДДЕ Вы и не говорили:)  
Дальше нужно понять, как и куда поступают данные, с какой скоростью идет обновление, вываливается сразу 100 тыс. строк или..., что хочется получить, насколько критична скорость обработки данных и конечная цель всей этой работы.
 
post_359032.xls - Вот это больше похоже на правду) щас попробую для большого кол-ва строк
 
На правду похоже все. Даже Ваша задача, условия которой выдаете по порциям.  
 
Зачем отображать данные по всем минутам? Вы их сможете визуально проанализировать?  
Какая конечная цель?
 
vikttur, при граничных значениях времени - ошибка. Т.е. где ложь вместо крайнего значения диапазона...
 
Не критично. Ведь в одну минуту записей >1.  
Если имеет значение, подправить формулу:  
=ЕСЛИ(A2=A3;МАКС(C2;D3);C2)
 
С учетом последней поправки все работает корректно и быстро в режиме оффлайн. Но, как только включаю вывод по DDE, процессор грузится под 100%, и формула  
=ВПР(ЦЕЛОЕ(E3*24*60);$A$2:$D$20;4;),  
растянутая у меня на диапазон $A$2:$D$200000, не успевает за выводом по DDE (просчитываться).Как быть?
 
Никто не знает, или это все знают и поэтому неохота писать?
 
haemoglobin, а брать на слабо не стоит. Вы видно правила не читали.    
Отвечу коротко - тему читал, но вопросы которые задал остались не отвеченными. Ваш вопрос не простой хотя бы по объему данных, поэтому машине тяжело и она не успевает. Дальше мне не интересно:(
 
Прошу прощения за нетерпеливость и невнимательность.    
Конечная цель - собрать из таблицы всех сделок в QUIK 1-минутные данные Open High Low Close. Open и Close с помощью форума я уже сделал, а вот с High Low - затык.    
Вот только для этого, видимо, надо создавать отдельную тему.
 
Итак, проблема описана в прикрепленном файле. Данные поступают из Quik по DDE на лист "Вывод", бывает до 50 строк в секунду(но редко).  
 
Необходимо, чтобы формула (или макрос) считала-работала быстрее (почти мгновенно), чем встроенный язык Quik (Qpile) - у него ограничение на обновление таблиц - минимум раз в секунду. Чтобы избежать этого ограничения, все и задумывается.  
 
В решении, предложенное уважаемым anvg, не смог разобраться. Оно было связано с подключением данных. Насколько я понимаю, обновление там происходит минимум раз в минуту, что не подходит (см. выше в этом посте).
 
Ваша задача не впервые на форуме в различных вариациях.  
Ссылки на копирование обновляемых сторонними программами данных на другой лист/книгу, ведение истории.... сохранение истории данных обновляемых по DDE Решения от Raptor  
http://www.planetaexcel.ru/forum.php?thread_id=6678  
http://www.planetaexcel.ru/forum.php?thread_id=6023  
   
Ну и еще 5 копеек... Там первое решение как раз в 1 книге с листа на лист копирует...  
http://www.planetaexcel.ru/forum.php?thread_id=5783 (перед использованием файла из этой темы загляните Сюда)  
http://www.planetaexcel.ru/forum.php?thread_id=3146 - ZVI  
http://www.planetaexcel.ru/forum.php?thread_id=8042  
Можно еще поискать, были и дальше решения.  
ПыСы Для интереса объясните зачем Вам "Необходимо, чтобы формула (или макрос) считала-работала быстрее (почти мгновенно), чем встроенный язык Quik ...раз в секунду." если результат работы - максимум за минутный отрезок? Как Вы будете отслеживать менее чем секундную динамику по текущей минуте, предыдущие же уже статичны и их значения не меняются:)
 
Спасибо за много ссылок, буду изучать.    
Скорость необходима как показатель оптимизированности решения задачи. Далее с этими данными будет производиться большое количество действий, а ресурсы компа не безграничны.
Страницы: 1
Читают тему
Наверх