Страницы: 1
RSS
Формула массива(?) Проверьте, пожалуйста.
 
Добрый день.  
 
Задача: чтобы сверяясь по коду данные с одного листа подтягивались на другой и, если соответствуют условию, проставлялись маркером "1" в соответствующие клетки.    
 
Я решила это так: =IFERROR(IF(AND(DATEVALUE(VLOOKUP($A5;Vacations!$A:$C;2;FALSE))<=A$1;DATEVALUE(VLOOKUP($A5;Vacations!$A:$C;3;FALSE))>=A$1);1;"");"")  
 
Однако, если соответствующий код встречается дважды, то проверка идет только для первого, что результат особенности VLOOKUP, как я понимаю.  
 
Требуется: чтобы и иные данные для одного и того же кода (т.е., если код повторяется несколько раз) тоже подтягивались.  
 
На основе вот этого (planetaexcel.ru/tip.php?aid=184) урока, Я попробовала написать: =IFERROR(INDEX(Vacations!$F:$F;SMALL(IF(A$5=Vacations!$B:$B;ROW(Vacations!$B:$B);"");COLUMN()-2));"")  
 
Однако, такая формула массива, растянутая на более 700 строк и 350 столбцов ужасно тормозит работу Excel. Я банально даже не могу посмотреть, работает ли она.    
 
Поэтому вопросы: проверьте, пожалуйста, формулу, и скажите, возможны ли альтернативы решения моей задачи без формулы массива?
 
IF(AND... лучше разбить на две IF(IF..., уберете часть лишних расчетов.  
Формулы массива на таком массиве данных будут тормозить работу файла. Совет: применять допстолбцы. Точнее не скажу.  
С таким размером файла вряд ли дождетесь реальной помощи. Кому охота ковыряться?
 
Доп.столбцы? Скорее, доп.строки. Но удвоение количества строк - это сильно плохо.  
 
ОК, вот полегче.
 
Я бы сделал макросом (на таких объемах формулы будут подтормаживать, тем более формулы массива)
Редко но метко ...
 
Макрос заточен именно под пример, если подойдет переделайте адреса диапазонов под рабочий файл. см. вложение
Редко но метко ...
 
GIG_ant,  
 
Ох! Спасибо за проделанную работу. Не успела ответить, что макросы мне не подходят: надо решить вопрос через формулы. Увы. Но, еще раз, спасибо.    
 
Возможно, попробую что-либо попровить с точки зрения исходных данных (чтобы по одному коду не было двух и более записей), но в голове пока только идея первого варианта (не формула массива) и последовательное чередование в строке даты начала и окончания, началы и окончания...
 
Не массивными формулами.  
Количество заполненных формулой ячеек - 3620  
Время расчета онных - 114 миллисекунд.
 
Игорь, решение интересное, но... на листе Vacations 122 есть два раза, и, соответственно, единички должны быть с 14.02.2011 по 20.02.2011 и с 25.04.2011 по 02.05.2011, а они только в первом интервале.  
 
Зы. я счас в отпуске, и для решений не совсем адекватен...
 
{quote}{login=Михаил С.}{date=06.07.2011 08:41}{thema=}{post}Игорь, решение интересное, но... на листе Vacations 122 есть два раза, и, соответственно, единички должны быть с 14.02.2011 по 20.02.2011 и с 25.04.2011 по 02.05.2011, а они только в первом интервале.  
 
Зы. я счас в отпуске, и для решений не совсем адекватен...{/post}{/quote}  
Сам только приехал, так что про адекватность речи быть не может ;)  
Не разобрался, пардон, исправил - теперь 133 миллисекунды.  
Формула массивная, хоть три клавиши и не требуются, и как видим - разница по времени обработки между массивной и не массивной очень незначительная. Создание нескольких доп.столбцов, для якобы облегчения расчетов - не комильфо, отсюда вывод: нужно пользовать макросы...
 
В версиях Excel, повыше 2003 (судя по шрифту - у автора именно такая), можно применить:  
=--(СЧЁТЕСЛИМН(Vacations!$A$1:$A$30;$A5;Vacations!$B$1:$B$30;"<="&B$4;Vacations!$C$1:$C$30;">="&B$4)>0)  
Что сокращает время обработки до 78 миллисекунд.  
P.S. Только не забыть значения в диапазонах: Vacations!$B$1:$B$30 и Vacations!$C$1:$C$30 преобразовать в числа...
Страницы: 1
Читают тему
Наверх