2

次のことを考慮してください。

    A    B    C
----------------
1   a    c    1
2   b    f    2
3   a    c    3
...
6   a    c    4

ここでの目標は、条件付きSUMPRODUCTを使用して、行6の値がそれぞれの列の値と一致したときにSUMPRODUCTが計算されるようにすることです。これが面白いことです。

使用する場合:

=SUMPRODUCT((A3:A5=A1),(B3:B5=B1),C3:C5)

入力引数は次のように評価されます。

=SUMPRODUCT({TRUE, FALSE, TRUE},{TRUE, FALSE, TRUE},{1, 2, 3})

しかし、結果は0です。

数学演算子を使用して数式を評価する前に、ブール値のTRUEとFALSEを対応する1と0にキャストすると、適切な結果が得られます。

=SUMPRODUCT(--(A3:A5=A1),--(B3:B5=B1),C3:C5)

また

=SUMPRODUCT(ABS(A3:A5=A1),ABS(B3:B5=B1),C3:C5)

また

=SUMPRODUCT((A3:A5=A1)^2,(B3:B5=B1)^2,C3:C5)

等...、

数学演算子が適用されると、最終的に1と0に評価されます。

=SUMPRODUCT({1, 0, 1},{1, 0, 1},{1, 2, 3})

適切な値を取得します。

私たちはExcelに頭を悩ませてきましたが、Excel自体の入力を適切に評価できないようです。TRUEとFALSEを1と0に変換するSUMPRODUCTコンパイル済みコードが欠落しているコード行があり、エラートラップは単に0を返すと考えられます。

何かご意見は?

4

2 に答える 2

2

私は周りを見回しましたが、Charles Williamsのサイトでさえ、なぜこのように機能するのかについての答えが見つかりません。元の「ネイティブ」(すべてコンマ)形式では、Sumproductは数字のみを操作し、数字以外のセルをゼロとして扱うのはプログラミングの選択だったと思います。

このように、B1:C3を参照するA1のSumproduct式は、B1のTRUEを「strimp099」と同じように(ゼロとして)扱います。Sumproductの本来の、かなり歩行者の意図と、平均的なユーザーが結果として期待することを考えると、これは理にかなっていると思います。

ここに画像の説明を入力してください

于 2012-08-14T00:14:40.270 に答える
2

ほとんどの関数は、配列引数の数値に論理値を強制しません。私見では、いくつかの関数に新しい動作を導入するよりも、一貫性の面で誤りを犯す方が望ましいです。Coercionにはパフォーマンスのオーバーヘッドも関連付けられているため、必要な場合にのみ実装する必要があります。

とはいえ、論理値を数値として(そしてテキスト値をゼロとして)扱ういくつかの追加関数が追加されたのでAVERAGEAVARASUMPRODUCTA関数も追加された可能性がありますが、混乱を招き、アプリケーションが肥大化する可能性があります。これらの目的は、Lotus123との互換性のためだったと思います。Excelのオプション|遷移式の評価の設定もあります。Advancedは、アクティブにするとTRUE / FALSEを計算の数値として扱いますSUMが、多くの関数はこれに期待どおりに応答しないようです。

于 2012-08-14T14:18:45.680 に答える