- ベストアンサー
SUMPRODUCT関数の疑問
ExcelでSUMPRODUCT関数を条件付きの合計を求めるのによく使っていますが、理解できない動作があります。 仮にA,B,Cが配列、b,cが定数として、A=aかつB=bの場合のCの合計を求めるものとします。 <式1>SUMPRODUCT((A=a)*(B=b)*C)→正しい計算結果 <式2>SUMPRODUCT((A=a)*(B=b),C)→正しい計算結果 <式3>SUMPRODUCT(A=b,B=b,C)→ゼロ <式4>SUMPRODUCT(1*(A=a),1*(B=b),C)→正しい計算結果 3つともすべて同じ計算結果が出てくると思いきや、<式3>だけが何故0になるのかが理解できません。 私は、理由が分からず、腑に落ちないまま<式1>の方法を使っています。 これは仕様上の問題なのか、詳しい理由が分かる方がいれば、解説をよろしくお願いします。 なお、私はExcel2000を使っていますが、Excel2002ではどうなるんでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは 関数での演算と直接的な四則演算とでは扱いが違うのは 多々あります。まして、今回の場合 比較演算の結果を 数式に使おうとしているのですから・・・・ 式3は SUMPRODUCT({TRUE,FALSE,TRUE},{FALSE,TRUE,TRUE},C) となり配列結果は数値として扱えない状態です。 式4では 比較演算の結果を四則演算 *1 で数値化して SUMPRODUCT({1,0,1},{0,1,1},C) となり配列結果は数値としてある変えます。 他の1と2式も同様で SUMPRODUCT()関数以前に演算で数値化しているため処理可能となります 簡単な例 A B C D 1 =C1=B1 =A1*1 2 =C2<>B2 =A2*1 3 =SUM(A1:A2) =SUM(D1:D2)
その他の回答 (1)
- nishi6
- ベストアンサー率67% (869/1280)
下の3式をを計算してみます <1>・・・ =SUMPRODUCT({1,1})=2 <2>・・・ =SUMPRODUCT({TRUE,TRUE})=0 <3>・・・ =SUMPRODUCT({TRUE,TRUE}*1)=2 これから(<2>に着目)、SUMPRODUCT関数は論理値(Boolean)の加算を行っていません。 <1>・・・ 1+1=2 <2>・・・ TRUE+TRUE=0 <3>・・・ {TRUE+TRUE}*1=TRUE*1+TRUE*1=1+1=2 質問の <式1>は Σ{各要素で(A=a)*(B=b)*Cを計算した演算結果} Σ{(Ai=a)*(Bi=b)*Ci} <式2>は Σ{<各要素で(A=a)*(B=b)を計算した演算結果>×<Cの各要素>} Σ{<(Ai=a)*(Bi=b)>*Ci} <式4>は Σ{<(A=a)*1の計算をした演算結果>×<(B=b)*1の計算をした演算結果>×<Cの各要素>} Σ{<(Ai=a)*1>*<(Bi=b)*1>*Ci} <式1>、<式2>、<式4> はすべて数値の演算結果を掛け算していることになります。 従って、<式1>=<式2>=<式4> になります。 X*Y*Z=(X*Y)*Z=(X)*(Y)*Z が成立するのとおなじでしょう。 ところが、<式3>は A=b と B=b が論理値になります。 従って、論理値を掛け算しながら加算しているので『0』になるはずです。 =SUMPRODUCT({TRUE,TRUE},{2,3})・・・・・ 0 =SUMPRODUCT({TRUE,TRUE}*1,{2,3})・・・・ 5 この2つを比べるとより分かり易いかもしれません・・・ >なお、私はExcel2000を使っていますが、Excel2002ではどうなるんでしょうか。 当方、Excel97ですが、この関数に付いては、Excel2000もExcel2002も同じでしょう。 comvさんとかぶってしまいました? ご参考に。
お礼
よく分かる解説で、ありがとうございました。 *演算は、論理値でも数値でも計算できる融通の利く演算で、SUMPRODUCTでは乗算は乗算でも数値しか扱わないという認識でよろしいでしょうか?
お礼
正直、マトモな回答が来ないと思っていました。 よく分かりました。勉強になりました。