次のシートのAmount
グループごとにName
列の移動平均を計算する配列式を書くことはできますか?
行はName
でソートされます。列Cには、配列数式があります。
(=ArrayFormula(IF(LEN(B2:B),SUMIF(ROW(B2:B),"<="&ROW(B2:B),B2:B)/COUNTIF(ROW(B2:B),"<="&ROW(B2:B)),)))
Amount
グループに関係なくName
列全体の移動平均を計算しますが、Name
が変更されるたびに移動平均を再開する式が必要です。私の式の結果(AdamLからの以前の回答に感謝します)は列Cにあり、望ましい結果は列Dに示されています。
NAME AMOUNT RUN AVE DESIRED
Tom 3 3 3
Tom 7 5 5
Tom 8 6 6
Tom 2 5 5
Bill 10 6 10
Bill 0 5 5
条件付き移動平均の場合、A2:Aのすべてのエントリがグループ化されていると仮定します。
=ArrayFormula(IFERROR((SUMIF(ROW(A2:A),"<="&ROW(A2:A),B2:B)-HLOOKUP(0,SUMIF(ROW(A2:A),"<"&ROW(A2:A),B2:B),MATCH(A2:A,A2:A,0),0))/(ROW(A2:A)-MATCH(A2:A,A2:A,0)-ROW(A2)+2)))
数か月前にスプレッドシートの最新バージョンに更新する前に、MMULTを次のような「条件付き実行合計」問題に使用することをお勧めしていました。
=ArrayFormula(IF(LEN(A2:A),MMULT((ROW(A2:A)>=TRANSPOSE(ROW(A2:A)))*(A2:A=TRANSPOSE(A2:A)),--B2:B)/MMULT((ROW(A2:A)>=TRANSPOSE(ROW(A2:A)))*(A2:A=TRANSPOSE(A2:A)),SIGN(ROW(A2:A))),))
このソリューションには、A2:A列をグループ化または並べ替える必要がないという利点もあります。ただし、最新バージョンでは、参照範囲が3163行に達すると、MMULTソリューションが破損します。これは、MMULTによって形成された2D配列が1,000万を超える要素を傾けるからです(1000万の平方根= 3162.278 ...)。
最初のソリューションはこの制限を受けませんが、数千行を参照する場合はおそらく非常に遅くなります。