Делает ли оператор Excel IF расчетный лист быстрее, чем использование IFERROR?

2971
Scheballs

Мой сценарий состоит в том, что у меня есть таблица стилей «Dashboard», которая ищет данные из большой таблицы на основе ячейки в столбце B, который всегда слева от нее. Ячейка в столбце B содержит INDEX, MATCH, IF, формулу массива для извлечения уникальных имен из таблицы, в которой выбрана «Группа». Этот список заполняется вниз и заполняется на основе раскрывающегося списка различных вариантов «Группа». Может возвращать до 20 имен, основанных на «Группе».

У меня есть 17 ячеек с формулами справа, которые могут вернуть ошибку, если данных там нет. Так что я предшествовал им с IFERROR()заявлением. Мой вопрос заключается в том, что если бы я поставил перед ними IF()оператор, который ускорил бы вычисления, потому что оператор IF прочитал бы, если True, то дал бы пустое значение, если false, тогда вычислил бы формулу.

Логично, что мне так кажется, но я хотел знать, чувствует ли кто-то из вас то же самое. Благодарю. Возможно, это больше для мета-обсуждения.

ps Вот одна из 9 самых сложных формул, которые я использую.

=IFERROR((SUMIFS(INDIRECT("tblData["&N$7&" Top Box Num]"),INDIRECT("tblData["&$B$7&"]"),$B$16,INDIRECT("tblData[Date]"),">="&$C$5,INDIRECT("tblData[Date]"),"<="&$D$5))/(SUMIFS(INDIRECT("tblData["&N$7&" Den]"),INDIRECT("tblData["&$B$7&"]"),$B$16,INDIRECT("tblData[Date]"),">="&$C$5,INDIRECT("tblData[Date]"),"<="&$D$5)),"")

Является ли приведенная выше формула медленнее, чем приведенная ниже, когда она истинна?

=IF(OR($C$16=0,C16=""),"",(SUMIFS(INDIRECT("tblData["&N$7&" Top Box Num]"),INDIRECT("tblData["&$B$7&"]"),$B$16,INDIRECT("tblData[Date]"),">="&$C$5,INDIRECT("tblData[Date]"),"<="&$D$5))/(SUMIFS(INDIRECT("tblData["&N$7&" Den]"),INDIRECT("tblData["&$B$7&"]"),$B$16,INDIRECT("tblData[Date]"),">="&$C$5,INDIRECT("tblData[Date]"),"<="&$D$5)))

Формулы, по сути, складывают значения числителя и делят их на значения знаменателя, где условия выполняются из таблицы строк 20000, и возвращают процентную оценку.

1

1 ответ на вопрос

2
pnuts

=IF does 'short circuit' but for for speeding up performance I would suggest http://msdn.microsoft.com/en-us/library/office/aa730921%28v=office.12%29.aspx. Includes a macro for timing. =INDIRECT would appear to be worth attention.

Спасибо pnuts, этот макрос `MICROTIME` действительно помог. Оказалось, у меня было две формулы массива, которые потребовались 1,5 секунды для запуска. Я понял, как заставить их работать, не будучи массивом, и теперь они занимают 0,5 секунды. Сократите общее время вычислений с 2 ​​до 0,5 секунд. Спасибо! Scheballs 10 лет назад 1
@ Scheballs TQ. Извините, это не более «окончательный» ответ, но, как вы можете видеть из статьи, просто слишком много переменных, чтобы взять любые две версии одной формулы и с уверенностью сказать, что это будет быстрее - какое-то указание на «вероятно» является лучше всего без специальных тестов. pnuts 10 лет назад 0

Похожие вопросы