いくつかの特定の条件に基づいてすべてのエントリを合計しようとしています。
目標は、セル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) のいずれかに「はい」とマークされている場合、レコードを複数回カウントするのではなく、1 回だけカウントしたいということです。たとえば、1 つのレコードでセル K と L の両方に「はい」とマークされていて、H に 1 番目がある場合、1 回ではなく 2 回カウントされます。
これは、SUMPRODUCT関数が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
明らかにうまく動作し、関数よりも高速になる可能性があります。
あなた(2 年後)にとっても、将来スプレッドシートを管理することになるかもしれない他の誰かにとっても、そのアイデアが何であるかは、あまり明白ではないかもしれません。
Excel には、この状況を非常にうまくカバーする関数 がありますOR()
。4 つの個別の比較を行って 1/0 を生成し、それを加算して比較するなどする代わりに、この関数は、現在も将来も誰の目にも明らかなように、4 つの比較を単純に実行し、出力として 1 または 0 を 1 つ生成します。
直接ではありません。TRUE または FALSE が生成されますが、列 H 項目を乗算すると、その結果が 1 または 0 に強制変換され、乗算が成功します。(同じ効果を強制変換するために--
または*1
メソッドが使用されているのを見ると、これが起こっています。ただし、乗算はどれも機能し、それらだけではないことから、乗算は必要ありません。
しかし、人々は (0+1+1+0) ルートを好み、彼らにとっては問題ではありませんが、単純な他の方法を望む場合は、これでOR()
十分です。