, но где-то видел решение такой же проблемы через функцию СУММПРОИЗВ. Как я понял, данная функция иммет дополнительные возможности не описаные в базовых синтаксисах.
Файл пример приолагаю, вдруг понадобится.
Есть два массива, которые нужно разделить каждый элемент разделить на соответсвующий другому массиву и просумировать результаты. Подошла бы функция
Код
СУММПРОИЗВ()
, но елементы, на которые делим, могут быть "" или 0 и тогда данная функция выдает ошибку деления на ноль. Нашел решения черер формулу массива
, но где-то видел решение такой же проблемы через функцию СУММПРОИЗВ. Как я понял, данная функция иммет дополнительные возможности не описаные в базовых синтаксисах.
Пока собирался ответить - Лена опередила Только одни скобки - лишние:
Код
=СУММПРОИЗВ((B1:B9<>0)*A1:A9/((B1:B9=0)+B1:B9))
Как работает: + в условиях это аналог ИЛИ (как * - аналог И). Таким образом: - Чтобы в знаменателе было либо само значение из второго массива, либо не ноль (чтобы не было ошибки деления). Мы сравниваем элемент с нулём и получаем массив, где на "ненулевых" местах стоят нули, а на "нулевых" - единички. Если теперь сложить этот массив с исходным = то получим массив, где нули заменены на единички. - Чтобы формула не учитывала те значения из второго массива, где мы заменили нули на единички - мы домножаем числитель на ноль для этих значений. Вернее, мы домножаем числитель на единичку для тех значений, которые нужно учитывать, и на ноль - для тех, которые не нужно. В результате в числителе мы имеем массив из значений, которые нужно поделить, и нулей. - После этого мы либо делим число на число, либо ноль на единичку , а затем складываем результаты...
Пока собирался ответить - Лена опередила Только одни скобки - лишние:
Код
=СУММПРОИЗВ((B1:B9<>0)*A1:A9/((B1:B9=0)+B1:B9))
Как работает: + в условиях это аналог ИЛИ (как * - аналог И). Таким образом: - Чтобы в знаменателе было либо само значение из второго массива, либо не ноль (чтобы не было ошибки деления). Мы сравниваем элемент с нулём и получаем массив, где на "ненулевых" местах стоят нули, а на "нулевых" - единички. Если теперь сложить этот массив с исходным = то получим массив, где нули заменены на единички. - Чтобы формула не учитывала те значения из второго массива, где мы заменили нули на единички - мы домножаем числитель на ноль для этих значений. Вернее, мы домножаем числитель на единичку для тех значений, которые нужно учитывать, и на ноль - для тех, которые не нужно. В результате в числителе мы имеем массив из значений, которые нужно поделить, и нулей. - После этого мы либо делим число на число, либо ноль на единичку , а затем складываем результаты...AndreTM
Skype: andre.tm.007 Donate: Qiwi: 9517375010
Сообщение отредактировал AndreTM - Пятница, 17.01.2014, 17:55
Если элемент второго массива не равен нулю, B2:B18<>0 даёт ИСТИНА, т.е. 1, а B2:B18=0 даёт ЛОЖЬ, т.е. 0. В итоге эти значения ни на что не влияют. Если же элемент второго массива равен нулю, то все наоборот, в итоге получаем 0/1, т.е. 0
Чтобы посмотреть работу формулы по частям, можно выделить часть формулы в строке формул и нажать F9. Чтобы вернуть прежний вид формулы ESC
Если элемент второго массива не равен нулю, B2:B18<>0 даёт ИСТИНА, т.е. 1, а B2:B18=0 даёт ЛОЖЬ, т.е. 0. В итоге эти значения ни на что не влияют. Если же элемент второго массива равен нулю, то все наоборот, в итоге получаем 0/1, т.е. 0
Чтобы посмотреть работу формулы по частям, можно выделить часть формулы в строке формул и нажать F9. Чтобы вернуть прежний вид формулы ESCPelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816