- ベストアンサー
配列数式で平均を出すと空欄が0で計算されてしまう
A B C D 1 1 2 1 {=AVERAGE(IF($A$1:$A$4=$C1,B$1:B$4))} 2 1 4 2 {=AVERAGE(IF($A$1:$A$4=$C2,B$1:B$4))} 3 2 6 4 2 8 上記のような数値、数式ですと、 B列すべてに数値が入力されているため、問題なく計算するのですが、 例えば、B2のセルを空欄にすると、空欄を0としてしまい、 D1の計算結果が1となってしまいます。 D1の数式を=AVERAGE(B1:B2)としますと、空欄は空欄として扱い、 計算結果は2となります。 配列数式を使った場合にも、空欄を空欄として扱い、 計算結果が2となるような方法はありませんでしょうか。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#1です。IFをネストにしないでも {=AVERAGE(IF(($A$1:$A$4=$C1)*(B$1:B$4<>""),B$1:B$4))} または {=AVERAGE(IF(($A$1:$A$4=$C1)*ISNUMBER(B$1:B$4),B$1:B$4))} でB列の空白を除去できます。
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 あえて配列数式にすることもないのでは? 実務では、配列数式でなければ解けないもの(そういう場合はVBAでも難しいことがある)の時にだけ、配列数式を使うようにしたほうがよいと思います。 =SUMIF($A$1:$A$4,C1,$B$1:$B$4)/COUNTIF($A$1:$A$4,C1)
お礼
回答ありがとうございます。 おっしゃるとおり、無理して配列数式を使うこともないのですが…。 この方法も試させていただきます。 数式的にもすっきりした感じです。
補足
試してみましたが、教えていただいた数式では、 B2が空欄の時に「0」として計算してしまい、 D1の計算結果が「1」になってしまいました。
- mu2011
- ベストアンサー率38% (1910/4994)
一例です。 {=AVERAGE(IF($A$1:$A$4=$C1,IF($B$1:$B$4>0,$B$1:$B$4)))} 又は、 =SUMPRODUCT(($A$1:$A$4=C1)*($B$1:$B$4))/SUMPRODUCT(($A$1:$A$4=C1)*($B$1:$B$4>0))
お礼
解決しました!ありがとうございます。 どちらの方法も確認しました。 今回は配列数式を使ってみたいので、上の式でやりたいと思います。 本当にありがとうございました。 なぜそうなるかは、落ち着いてからしっかり考えたいと思います。
補足
この数式ですと、B列が「0」だった場合も計算してくれなくなります。 「0」と空欄を区別したいという趣旨が 全く伝わらないような質問文でした。 すみませんでした。
- mshr1962
- ベストアンサー率39% (7417/18945)
その数式だと結果は3ではないのですか? 式の後半がB$1:B$4でなくA$1:A$4になってませんか?
お礼
補足を間違えていました。 少々焦っております。 A B C D 1 1 2 1 {=AVERAGE(IF($A$1:$A$4=$C1,B$1:B$4))} 2 1 "" 2 {=AVERAGE(IF($A$1:$A$4=$C2,B$1:B$4))} 3 2 6 4 2 8 この時のD1の結果を「2」になるようにしたいんです。
補足
ご指摘ありがとうございます! D1の計算結果は×「2」→○「3」です。 書き間違えました。
お礼
ありがとうございます。 試してみます!
補足
どちらの方法も、「0」と空欄を区別してくれます。 ありがとうございました。