Я пытаюсь обобщить все записи, основываясь на нескольких конкретных условиях.
Цель состоит в том, чтобы подсчитать все записи, в которых в ячейках J, K, L или M отмечено «да», а в ячейках H стоит «1-й».
Вот формула, которую я сейчас использую:
=SUMPRODUCT((('J2:J100="yes") + (K2:K100="yes") + (L2:L100="yes") + (M2:M100="yes")) * (H2:H100="1st"))
Это почти работает.
Проблема в том, что я хочу посчитать запись только один раз, если у него есть «да» для любой из 4 ячеек (J, K, L, M), а не несколько раз. Так, например, если одна запись имеет «да» в обеих ячейках K и L и имеет 1-е место в H, то он будет посчитан дважды, а не один раз.
Это потому, что функция СУММПРОИЗВ даст результат 0 + 1 + 1 + 0 * 1, что равно 2.
Я думаю, что если бы существовал способ преобразовать первую часть функции, которую я написал, в логическое значение так, чтобы любое положительное значение обрабатывалось как 1, а любое отрицательное — как False, то это решило бы мою проблему.
решение1
Добавить>0
=SUMPRODUCT((('J2:J100="yes") + (K2:K100="yes") + (L2:L100="yes") + (M2:M100="yes")>0) * (H2:H100="1st"))
Сейчас
(0 + 1 + 1 + 0 > 0) * 1
Станет
1 * 1
который1
решение2
>0
очевидно, будет работать хорошо и, вероятно, быстрее, чем функция.
Возможно, вам (через два года) или кому-то другому, кто когда-нибудь будет заниматься ведением электронной таблицы, будет не совсем понятно, в чем заключается идея.
В Excel есть функция, OR()
которая очень хорошо охватывает эту ситуацию. Вместо четырех отдельных сравнений, которые производят 1/0, добавляются, сравниваются и т. д., она просто, понятно всем, сейчас и навсегда, выполняет четыре сравнения и выдает один единственный 1 или 0 в качестве своего вывода.
Ну, не напрямую: он выдает ИСТИНА или ЛОЖЬ, но умножение его на элемент столбца H преобразует его результат в 1 или 0 и позволяет умножению быть успешным. (Вот что происходит, когда вы видите, что люди используют методы --
или *1
для приведения к одному и тому же эффекту. Но ЛЮБОЕ умножение срабатывает, а не только эти, так что они не нужны.)
Но людям нравится маршрут (0+1+1+0), и для них это не проблема, но если вам нужен другой простой метод, то OR()
он вам подойдет.