Страницы: 1
RSS
Как найти позицию первого сверху непустого значения в списке?
 
Собственно,  
Как найти позицию первого сверху непустого значения в списке?  
 
Функция поискпоз - находит всегда последнюю-нижнюю позицию.
caustic
 
Спасибо  
Интересно... а что означает звездочка?  
 
Но, я имел в виду поиск по числам (правый столбец).  
Я эту формулу попробовал применить к числам - не получилось?  
почему?
caustic
 
Формула массива  
=МИН(ЕСЛИ($D$1:$D$20<>"";СТРОКА($D$1:$D$20)))  
Попробуйте так, для ввода формулы нажать CTRL+SHIFT+ENTER
 
{quote}{login=}{date=31.07.2009 10:42}{thema=}{post}Формула массива  
=МИН(ЕСЛИ($D$1:$D$20<>"";СТРОКА($D$1:$D$20)))  
Попробуйте так, для ввода формулы нажать CTRL+SHIFT+ENTER{/post}{/quote}  
 
Спасибо - но не подойдет, т.к. мне нужна позиция в диапазоне а не номер строки.
caustic
 
А не то чтобы позиция первого сверху непустого значения в списке всегда будет первой, т.е. равной 1?
KL
 
{quote}{login=KL}{date=31.07.2009 11:42}{thema=}{post}А не то чтобы позиция первого сверху непустого значения в списке всегда будет первой, т.е. равной 1?{/post}{/quote}  
 
Ну в списке она будет первой, если непустая.  
Мне это нужно для того чтобы потом сложить все значения в новый список,  
а формироваться он будет путем изменения диапазона поиска отталкиваясь от уже найденных значений, т.е. используя СМЕЩ.  
 
для решения вот этой задачи:  
http://www.planetaexcel.ru/forum.php?thread_id=8944
caustic
 
{quote}{login=CaustiC}{date=31.07.2009 09:55}{thema=Как найти позицию первого сверху непустого значения в списке?}{post}Функция поискпоз - находит всегда последнюю-нижнюю позицию.{/post}{/quote}  
 
Это - неправда. ПОИСКПОЗ находит последнюю позицию только в случае поиска с приблизительным совпадением, а так первую. Посмотрел файл с примером, оказывается речь о позиции в диапазоне. Как насчет этого?  
 
=СУММПРОИЗВ(ПОИСКПОЗ(ИСТИНА;D6:D12>0;0))
KL
 
{quote}{login=KL}{date=31.07.2009 11:49}{thema=Re: Как найти позицию первого сверху непустого значения в списке?}{post}{quote}{login=CaustiC}{date=31.07.2009 09:55}{thema=Как найти позицию первого сверху непустого значения в списке?}{post}Функция поискпоз - находит всегда последнюю-нижнюю позицию.{/post}{/quote}  
 
Это - неправда. ПОИСКПОЗ находит последнюю позицию только в случае поиска с приблизительным совпадением, а так первую. Посмотрел файл с примером, оказывается речь о позиции в диапазоне. Как насчет этого?  
 
=СУММПРОИЗВ(ПОИСКПОЗ(ИСТИНА;D6:D12>0;0)){/post}{/quote}  
 
Блин! Ну вы монстры какие то!  
Спасибо!  
Вопрос нашел свой ответ!!
 
KL  
 
Подскажи - ка сделать так чтобы не по одному столбцу а по нескольким расчитывалось?  
т.е.
 
Например вот так, но это крайне ресурсоемкая формула массива (ввод с помощью {Ctrl+Shift+Enter}), если диапазон большой, то пересчет может сильно замедлиться:  
 
=МИН(ЕСЛИ(D6:F12>0;СТРОКА(D6:F12)))-СТРОКА(D6)+1
KL
 
=СУММПРОИЗВ(ПОИСКПОЗ(ИСТИНА;ДЛСТР(D6:D12&E6:E12&F6:F12)>0;0))  
тоже массив.  
 
вопрос-оффтоп: этот вариант наверное быстрее, т к поиски заканчиваются при нахождении непустого значения, так?
 
А, собственно, там суммпроизв не нужен.  
Он в любом случае требует ctrl+shift+enter  
=ПОИСКПОЗ(ИСТИНА;ДЛСТР(D6:D12&E6:E12&F6:F12)>0;0)
 
разница между  
=СУММПРОИЗВ(ПОИСКПОЗ(ИСТИНА;D6:D12>0;0))  
и  
{=ПОИСКПОЗ(ИСТИНА;D6:D12>0;0)}  
 
менее 1%, но есть..
Живи и дай жить..
 
Не, меня интересует разница между =ПОИСКПОЗ(ИСТИНА;ДЛСТР(D6:D12&E6:E12&F6:F12)>0;0) и =МИН(ЕСЛИ(D6:F12>0;СТРОКА(D6:F12)))-СТРОКА(D6)+1  
 
Можешь глянуть пожалуйста? кстати, а каким макросом(или чем?) вы засекаете время пересчёта?
 
Сейчас снова вдалеке от компа, но...  
1) 2-я формула предложенная мной - первое, что пришло в голову на бегу. Мне кажется есть более быстрый способ. Проверю - отпишу  
2) конкатенация может обойтись дороже, чем перебор, но надо проверить
KL
 
Как я и предполагал, в MSO2007 (на моей машине), для полностью заполненного числами диапазона 1000 х 3, формула "=МИН(ЕСЛИ(D6:F12>0;СТРОКА(D6:F12)))-СТРОКА(D6)+1" на 35% быстрее, чем "=ПОИСКПОЗ(ИСТИНА;ДЛСТР(D6:D12&E6:E12&F6:F12)>0;0)" :-) Разница сокращается по мере опустения диапазона, при пустом диапазоне с данными в последней строке скорости практически одинаковые.
KL
 
{quote}{login=}{date=31.07.2009 01:52}{thema=}{post}кстати, а каким макросом(или чем?) вы засекаете время пересчёта?{/post}{/quote}  
 
см. надстройку RangeCalc.zip здесь: http://www.decisionmodels.com/downloads.htm  
Очень важно: перед проведением замеров, обязательно менять режим пересчета на ручной, иначе данные будут искаженными!
KL
 
длстр - дольше
Живи и дай жить..
 
{quote}{login=CaustiC}{date=31.07.2009 11:03}{thema=Re: }{post}{quote}{login=}{date=31.07.2009 10:42}{thema=}{post}Формула массива  
=МИН(ЕСЛИ($D$1:$D$20<>"";СТРОКА($D$1:$D$20)))  
Попробуйте так, для ввода формулы нажать CTRL+SHIFT+ENTER{/post}{/quote}  
 
Спасибо - но не подойдет, т.к. мне нужна позиция в диапазоне а не номер строки.{/post}{/quote}  
ИМХО, но ведь зная начальную строку диапазона достаточно ввести в формулу минус константу номер строки не входящий в диапазон. Или я не уловил глубинной сути?  
Игорь67
 
Начал пристраивать  
=МИН(ЕСЛИ(D6:F12>0;СТРОКА(D6:F12)))-СТРОКА(D6)+1  
 
но заметил что если значений в таблице нет, то. показывает (-5)  
Можно обойти ф-цией Если но не красиво как то...
caustic
Страницы: 1
Читают тему
Наверх