D7:Dの範囲の数値があり、一部のセルが空の場合があります。最後の7つの数字の平均を求めますが、空白をスキップします。したがって、最後の7つで3つだけがいっぱいになっている場合は、さらに戻って合計7つを見つけて平均化します。
1つのアプローチを次に示します。
=average(indirect("D" & iferror(large(filter(row(D7:D), len(D7:D)), 7), row(D7)) & ":D"))
説明:
filter(row(D7:D), len(D7:D))
は、指定された範囲内の空でないエントリの行番号で構成される配列を返します。large(..., 7)
は、この配列から7番目に大きい番号を選択します。これは、平均化を開始する行番号です。iferror(..., row(D7))
は、範囲に含まれる空白以外のエントリが7つ未満の場合の安全策です。この場合、平均化はD7から始まります。 row(D7)
の代わりに「7」と入力することもできますが、row(D7)
を使用すると、他の場所にコピーする場合に備えて、式の移植性が向上します。indirect("D" & ... & ":D")
は平均化の範囲を形成します。たとえば、前の計算の出力が9だった場合はD9:D
です。average
が平均を行います。他の集計関数もここに配置できます。=AVERAGE(OFFSET(A:A;COUNT(A:A)-7 + MATCH(TRUE;INDEX(A:A<>0);0)-1;0))
=COUNT(A:A)
を使用して、行Aにある数字の数をカウントします。テキストを含むセルはカウントされません。この例では、9
が得られます。=COUNT(A:A)-7
。これにより、2
が得られます。次に、オフセット関数を使用して完全な列の範囲を取得しますが、2セルのオフセットを使用すると、事実上、列の一部のみが残り、正確に7つの値が残ります
値を持つ最初のセルの前に空白セルのない列を想像してください。次に、簡略化された例は=OFFSET(A:A; COUNT(A:A)-7 ;0)
のようになります。しかし、上の図に示すように、列が空白のセルで始まるとすぐには機能しません
次に、空白セルの数だけオフセットを拡張する必要があります。これは、すべての空白値を連続してカウントするという意味ではありません。最初の空でないセルの前のものだけ。
=MATCH(TRUE;INDEX(A:A<>0);0)-1
でそれらをカウントし、結果または例として6
を取得できます
次に、オフセット関数を変更し、このカウントを追加して、7つの値のみを含む正しい範囲を取得しますOFFSET(A:A; COUNT(A:A)-7 + MATCH(TRUE;INDEX(A:A<>0);0)-1 ;0)
最後のステップとして、この範囲の平均を計算します。 1,2,3,4,5,6,7の平均は4なので、この例では結果として4が得られます。=AVERAGE(OFFSET(A:A;COUNT(A:A)-7 + MATCH(TRUE;INDEX(A:A<>0);0)-1;0))
さらに別の方法:
=AVERAGE(ARRAY_CONSTRAIN(SORT(FILTER(A:A, ISNUMBER(A:A)), 1, 1), 7, 1))
外植:
編集:誤解して申し訳ありません。上記は、列の最後の7つの値ではなく、LARGEST 7の値を平均します。最後の7つの値を平均するには、Normal Humanのソリューションが最適です。より少ない関数を使用する別の方法は、QUERY()を使用することです
列Aの数値データを想定して、次を試してください。
=AVERAGE(QUERY(ARRAYFORMULA({ROW(A:A),A:A}),"select Col2 where Col2 is not null order by Col1 desc limit 7", 0))