Scr*_*eap 1 google-sheets google-sheets-formula
我有一个工作公式,需要将其拖动以自动填充列并希望将其变成数组公式:
=AVERAGEIF(INDIRECT("A2:A"&ROW()), ">=0",INDIRECT("A2:A"&ROW()))
Run Code Online (Sandbox Code Playgroud)
因此,如果您将此公式放在 B 列中,它将采用 A 列中的值并不断对它们进行向下平均,跳过任何小于 0 的值。以下是示例屏幕截图:https://i.stack.imgur.com /Aj0ar.png
我怎样才能为此制作一个数组公式?
这个公式很接近,但我不知道如何添加“>=0”条件:
=ArrayFormula(IF(LEN(A2:A),SUMIF(ROW(A2:A),"<="&ROW(A2:A),A2:A)/COUNTIF(ROW(A2:A),"<="&ROW(A2:A)),))
Run Code Online (Sandbox Code Playgroud)
不再需要ArrayFormula为此使用。
=MAP(SEQUENCE(COUNTA(A2:A)),
LAMBDA(rowOff,
AVERAGEIF(OFFSET(A2,0,0,rowOff),">=0"))
)
Run Code Online (Sandbox Code Playgroud)
rowOff对于1.. 中的每个元素# items in column:
AverageIf获取从顶部行开始的所有内容的平均值rowOff,排除所有内容>=0这是一个可以进入B2的公式(无需拖动),但它相当复杂:
=ArrayFormula(IFERROR(IF(LEN(A2:A),MMULT(TRANSPOSE((SEQUENCE(COUNTA(A2:A),1,2)<=TRANSPOSE(SEQUENCE(COUNTA(A2:A),1,2)))*FILTER(A2:A,LEN(A2:A))),--(FILTER(A2:A,LEN(A2:A))>0))/COUNTIFS(SEQUENCE(COUNTA(A2:A)),"<="&SEQUENCE(COUNTA(A2:A)),FILTER(A2:A,LEN(A2:A)),">=0"),"")))
Run Code Online (Sandbox Code Playgroud)
=ArrayFormula(IFERROR(
IF(
LEN(A2:A),
MMULT(
TRANSPOSE(
(SEQUENCE(COUNTA(A2:A),1,2)<=
TRANSPOSE(SEQUENCE(COUNTA(A2:A),1,2))
)*FILTER(A2:A,LEN(A2:A))
),
--(FILTER(A2:A,LEN(A2:A))>0)
)/
COUNTIFS(
SEQUENCE(COUNTA(A2:A)),
"<="&SEQUENCE(COUNTA(A2:A)),
FILTER(A2:A,LEN(A2:A)),
">=0"
),
""
)
))
Run Code Online (Sandbox Code Playgroud)
MMULT下三角矩阵来实现运行总和,如果数字为负数,则将其过滤掉。在这种情况下,它会产生.COUNTA(A2:A)A2:A{2;2;6;6;6;6}COUNTIFS()一个包含我们要除以的元素数量的数组。在这里,是{1;1;2;2;3;4}IF。IFERROR。(#DIV/0!如果前导数字为负数,则可能会发生错误。)| 归档时间: |
|
| 查看次数: |
202 次 |
| 最近记录: |