Страницы: 1
RSS
Работа с массивами при выборе варианта расчета
 
Добрый день, планетяне! Накопив немного (но недостаточного) опыта работы с Excel, озадачил себя оптимизацией обработки данных, а именно сократить в своих файлах размеры формул, убрать по возможности формулу ЕСЛИ/СУММЕСЛИ, перейти на формулы массива. В связи с чем и мой вопрос - см. пример. Заранее благодарю за ответ.    
 
PS Сообщение получилось несколько сумбурным, потому что не уверен на все 100% в выборе пути.  ;) Потому обращаюсь к модераторам, можно ли, допустим, в "копилке" создать тему об оптимизации файлов Excel. Другими словами, в этой теме приводились бы примеры/способы уменьшения файлов, увеличения скорости обработки данных и т.д. На форуме подобные сообщения периодически появляются, но было бы удобнее, если бы эта информация хранилась в одном месте. И возможно, тогда не было бы моего сообщения  ;) PPS И я плохо искал...
 
{quote}{login=pygma}{date=12.02.2010 10:46}{thema=Работа с массивами при выборе варианта расчета}{post}озадачил себя оптимизацией обработки данных, а именно сократить в своих файлах размеры формул, убрать по возможности формулу ЕСЛИ/СУММЕСЛИ, перейти на формулы массива.{/post}{/quote}  
Вы считаете, что замена простых формул на тяжелые и неудобные в работе формулы массива - это оптимизация? :)
 
"глянул файл"  
Складывается впечатление, что вам принципиально именно использование формул массивов, а не результат. Т е впечатление о них как о какой-то панацее. Это не совсем так. В целом, можете все формулы ввести нажатием ctrl+shift+enter, и ТЕ САМЫЕ СКОБКИ будут радовать глаз, но..  
 
Касательно вопросе в файле-можно, но как должен выбираться вариант?  
К примеру, можно так:  
=СУММ(ИНДЕКС($B$2:$C$5;;ПОИСКПОЗ($B$11;$B$1:$C$1;0)*($A$2:$A$5="иванов")))  
в b11 пишем "вариант 1" или "вариант 2".
 
От жеж мы гарные хлопцы. Прямо таки втроём с утра пораньше одновременно каждый по ответу негативного характера..
 
{quote}{login=Саша}{date=12.02.2010 11:01}{thema=}{post}От жеж мы гарные хлопцы. Прямо таки втроём с утра пораньше одновременно каждый по ответу негативного характера..{/post}{/quote}  
 
Нет, нет, ответы у вас нормальные. Ну вот, видите: и я ошибался. Я думал, что заменив СУММЕСЛИ на формулы массивов - увеличу скорость обработки файлов. ...хотя указанная и формула была любимой, но зато познал, что такое формулы массивов. В моих рабочих файлах я часто применяю логические формулы, в том числе и ЕСЛИ...Почитал здесь некоторые сообщения, наткнулся на то, что они грузят файлы. А как без них: даже для того, чтобы файл был красивый, не было всяких н/д и т.п. - уже необходимо использовать ЕСЛИ(ЕОШИБКА...) ? И от условного форматирования пришлось по максимуму отказаться...Теперь ищу пути...
 
{quote}{login=vikttur}{date=12.02.2010 10:59}{thema=Re: Работа с массивами при выборе варианта расчета}{post}{quote}{login=pygma}{date=12.02.2010 10:46}{thema=Работа с массивами при выборе варианта расчета}{post}озадачил себя оптимизацией обработки данных, а именно сократить в своих файлах размеры формул, убрать по возможности формулу ЕСЛИ/СУММЕСЛИ, перейти на формулы массива.{/post}{/quote}  
Вы считаете, что замена простых формул на тяжелые и неудобные в работе формулы массива - это оптимизация? :){/post}{/quote}  
 
Гм...моя уверенность полетела вниз..  ;) Просто думал, что если сокращу в своих формулах _ЕСЛИ_, увеличу скорость обработки. Не знал, что формулы массивов "страдают" (точнее страдает пользователь  ;)  ) "тугодумием". PS Ваша формула мне понравилась - спасибо! Постараюсь где-нибудь ее использовать в своих расчетах.
 
Тут дело в не проведении лишних расчётов, ну и вообще оптимизация самих расчётов. Чем этого добиваться-вопрос десятый.  
Так же стоит обратить внимание, что вам с этим файлом работать, а не в музей нести. Использование условного форматирования(ну или массивов) облегчает работу, но пересчёт становится заметным? Да ради бога.  
Если вопрос насущный, выложите лучше упрощённый вариант файла, желательно оставив только условно-проблемные части.  
Если нет и в целом всё устриавает, лучше почитайте какую-нибудь интересную книжку, попивая кофе.
 
Оптимизация - это улучшение, убыстрение и т.д. И заменять простую логику на другие функции можно и нужно только тогда, когда этим достигается желаемое.  
Например, ЕСЛИ можно заменить на ВПР, ВЫБОР или ту же формулу массива - зависит от количества вложений, предварительных расчетов и т.д. Таких примеров на форуме много. Можно оптимизировать не только формулами - VBA пока что поддерживается, из 2010 не убрали.
 
{quote}{login=Саша}{date=12.02.2010 10:59}{thema=}{post}"глянул файл"  
Складывается впечатление, что вам принципиально именно использование формул массивов, а не результат. Т е впечатление о них как о какой-то панацее. Это не совсем так. В целом, можете все формулы ввести нажатием ctrl+shift+enter, и ТЕ САМЫЕ СКОБКИ будут радовать глаз, но..".{/post}{/quote}  
 
Не совсем так, при использовании формул массива нужен иной подход, формулы немного по-другому пишутся - разбирался недавно. А так как раньше пользовался в единичных случаях, то особо ими и не интересовался. Но в остальном вы правы, я думал, что формулы массивов - это панацея для более быстрой обработки файлов, но уже понимаю, что ошибался...А для того, чтобы оптимизировать формулы, делать их короткими, надо, конечно, очень хорошо знать их возможности..Посмотрел на соревнования в "избушке" - восхитило!  ;)
 
И еще: а есть ли возможность в массивах обходить текствые значения: например, по критерию суммируется ряд - 1,2,3, "Иванов", 4,5..?
 
{quote}{login=The_Prist}{date=12.02.2010 10:58}{thema=}{post}Здравствуйте.  
Как бы сказать... Можно. Но тогда надо просто создать тему вроде - "Приемы по оптимизации файлов". И в ней обсудить все способы, а потом тему уже в Копилку.    
По другому - увы... Движок форума не позволяет перебрасывать отдельные сообщения из темы в тему. Только полностью темы...  
 
Так что неизвестно насколько это вообще полезно. Так как кто-то выскажется сейчас по оптимизации, а кто-то сможет только через месяц. А постить в Копилку нет возможности.{/post}{/quote}  
 
Конечно, жаль...Здесь на форуме попадаются интересные решения. А так как количество сообщений/тем растет становится сложным поиск нужных - можно и не заметить желаемое...Ну да ладно...
 
Кхе..спасибо за ликбез по формулам массива, учту. :)  
 
Поясню касательно лишних расчётов на вашем примере.  
Вам для работы нужна 1 из 2 цифр.  
 
Ваши текущие формулы считают, условно, секунду каждый столбец. Итого 2 секунды.  
 
Вариант Виктура будет считать, опять же условно, секунду+0,5 секунды на формирование массива индекса, но всего 1 раз. Т е 1.5 секунды. Было бы 10 столбцов, разница была бы на 8,5 секунд.  
Если с этим ещё и удобнее работать, то заменить стоит. Если менее удобно, но условные пол секунды пересчёта важны, то надо определится, что доставляет вам больше хлопот: условные пол секунды или это "менее удобно".  
 
Иногда, наоборот, лучше иметь 1 формулу массива, которая делает кучу лишних расчётов, и пересчёт на несколько секунд больше, нежели доп столбцы, т к тупо удобнее.  
Ну и зачастую на производительность можно наплевать, т к пересчёт в любом случае исчисляться будет в миллисекундах.  
 
Последний вопрос не понятен-можно на примере?
 
{quote}{login=Саша}{date=12.02.2010 11:30}{thema=}{post}Кхе..спасибо за ликбез по формулам массива, учту. :)  
 
Последний вопрос не понятен-можно на примере?{/post}{/quote}  
 
Вам тоже спасибо за ликбез! (но я уже серьезно) Пример немного подправил под свой новый вопрос. Ситуация следующая: вертикально заполняются однородные карточки, которые содержат, кроме цифр, заголовки столбцов. Эти самые заголовки (текст)не дают считывать данные через формулу массива СУММ((...)*(...)*___)) PS Хотя, раз наше обсуждение выявило тяжеловесность расчетов через формулы массивов, можно оставить вопрос открытым (или закрытым). Другие пути решения тоже есть...
 
Та же формула в файле.
 
Ещё раз-вам результат какой нужен? Где указывается столбец? Нафига считать и что считать? Т е что в итоге то нужно?  
 
Простейший вариант:  
=СУММ(ИНДЕКС(ЕСЛИ(A3:A18="иванов";B3:C18);;2))  
(тут двойку нужно заменить на ссылку/условие получения нужного номера столбца: 1 или 2)  
 
Можно использовать конструкцию если(ечисло(диапазон чисел);диапазон чисел*("вася"=диапазон имён)
 
{quote}{login=vikttur}{date=12.02.2010 12:06}{thema=}{post}Та же формула в файле.{/post}{/quote}  
 
Большое вам спасибо за расширение моего Excel-кругозора!
 
{quote}{login=Саша}{date=12.02.2010 12:07}{thema=}{post}Ещё раз-вам результат какой нужен? Где указывается столбец? Нафига считать и что считать? Т е что в итоге то нужно?  
 
Простейший вариант:  
=СУММ(ИНДЕКС(ЕСЛИ(A3:A18="иванов";B3:C18);;2))  
(тут двойку нужно заменить на ссылку/условие получения нужного номера столбца: 1 или 2)  
 
Можно использовать конструкцию если(ечисло(диапазон чисел);диапазон чисел*("вася"=диапазон имён){/post}{/quote}  
 
Александр, спасибо вам за потраченное время и предложенную помощь...Раз обработка через формулы массивов - не искомый вариант, буду искать другие пути. Вопросы, которые у меня появятся в дальнейшем и которые я не смогу решить самостоятельно, конечно же буду искать на этом форуме. Поэтому, возможно, мы еще с вами увидимся.. Еще раз спасибо!  :) PS Результат своей задачи я нашел другим путем, но ваша помощь мне пригодилась.
Страницы: 1
Читают тему
Наверх