Мне нравится форма функции IFNA( expression, value_if_NA )
для проверки условий без необходимости повторной оценки.
Итак, я подумал, что напишу функцию, которая, как мне казалось, отсутствует, IFZERO( expression, value_if_zero )
. Моя функция работает, но, кажется, она работает особенно медленно, а иногда и в тупиках (в небольшом проценте ячеек отображается «Загрузка ...»).
function IFZERO( expression, valueIfZero )
{
var result = eval( expression );
if ( result === 0 )
return valueIfZero;
return result;
}
Я использую столбец ячеек с формулой этого типа:
=IFZERO( E70 - SUMIF( A:A, A70, G:G ), "" )
Результат:
Ячейка показывает «Загрузка ...» и занимает около 500 мсек, чтобы выполнить одну ячейку.
На моем листе всего около 80 строк, и хотя значения в A, G и т. Д. Взяты из FILTER()
, получены из других листов, что эквивалентно (но менее красиво)
=IF( E70 - SUMIF( A:A, A70, G:G ) = 0, "", E70 - SUMIF( A:A, A70, G:G ) )
возвращается мгновенно.
Мой вопрос: я пропустил какую-то оптимизацию в моей функции JavaScript? Интересно, есть ли способ, основанный на событиях, сделать то же самое без необходимости eval()
в слое JavaScript.