値の行があり、空白セルを除いた最初の 3 つの値の平均を求めたいです。例:
ABCDEFG 12 空白 8 空白 7 9 4
最初の 3 つの空白でないセルの平均は 9 になるはずですが、これを計算できる数式が見つかりません。誰か助けてくれませんか?
答え1
でA2入力:
=IF(A1="",0,1)
そしてB2入力:
=IF(OR(B1="",SUM($A$2:A2)=3),0,1)
コピーします。次に別のセルに次のように入力します。
=SUMPRODUCT((1:1)*(2:2))/3
答え2
答え3
解決策1
ブルートフォース: 必要な平均値は次のように計算できます。
=IF(COUNT($A1:$C1)=3, 平均($A1:$C1), IF(COUNT($A1:$D1)=3、平均($A1:$D1)、 IF(COUNT($A1:$E1)=3, 平均($A1:$E1), IF(COUNT($A1:$F1)=3、平均($A1:$F1)、 IF(COUNT($A1:$G1)=3, AVERAGE($A1:$G1), "おっと"))))) (1 行バージョン:) =IF(COUNT($A1:$C1)=3, AVERAGE($A1:$C1), IF(COUNT($A1:$D1)=3, AVERAGE($A1:$D1), IF(COUNT($A1:$E1)=3, AVERAGE($A1:$E1), IF(COUNT($A1:$F1)=3, AVERAGE($A1:$F1), IF(COUNT($A1:$G1)=3, AVERAGE($A1:$G1),"oops")))))
これは、3 つの数字を含む行の最短の初期サブセットを探し、その平均を計算します。これは、列の数が多い場合に扱いにくくなるだけでなく、IF()
ネスト制限がかなり低い (と思われる) ため、実際にはすぐに失敗する可能性があります。
解決策 1.9
フィネス。
まだ完成していないので、これを「1.9」と呼んでいます。
SMALL(IF(ISNUMBER($A1:$G1),COLUMN($A1:$G1),""), {1,2,3})
(配列数式で使用)行1の最初の3つの数字の列番号を検索します。
IF(ISNUMBER($A1:$G1),COLUMN($A1:$G1),"")
部分は次のように評価されます
IF( {TRUE,FALSE,TRUE,FALSE,TRUE,TRUE,TRUE}, {1,2,3,4,5,6,7}, "" )
これは次のように要約される。
{ 1, "", 3, "", 5, 6, 7 }
そして、SMALL(…, {1,2,3})
上記の式は を生成する{ 1, 3, 5 }
。これは単純に言うと次のようになる。
=AVERAGE(INDEX($A7:$G7, 1, SMALL(IF(ISNUMBER($A7:$G7),COLUMN($A7:$G7),""),{1,2,3})))
または
=AVERAGE(OFFSET($A7:$G7, 1, SMALL(IF(ISNUMBER($A7:$G7),COLUMN($A7:$G7),""),{1,2,3})))
しかし、それらは (12) の値かA1
エラー (#DIV/0!
または#REF!
) を返します。これをどうやって終わらせるかわかりません。