我有一个工作公式,我需要拖动这个公式来自动填充一个列,并希望将它变成一个数组公式:
=AVERAGEIF(INDIRECT("A2:A"&ROW()), ">=0",INDIRECT("A2:A"&ROW())) 所以,如果把这个公式放在B列中,它将取A列中的值,并不断地将它们平均下来,跳过任何小于0的值。下面是一个屏幕截图示例:https://i.imgur.com/nRq8hAH.png
我如何才能为这个建立一个数组公式?
这个公式很接近,但我不知道如何添加">=0“条件:
=ArrayFormula(IF(LEN(A2:A),SUMIF(ROW(A2:A),"<="&ROW(A2:A),A2:A)/COUNTIF(ROW(A2:A),"<="&ROW(A2:A)),))发布于 2020-09-14 20:32:22
Lambda更新
不再需要为此使用ArrayFormula。
=MAP(SEQUENCE(COUNTA(A2:A)),
LAMBDA(rowOff,
AVERAGEIF(OFFSET(A2,0,0,rowOff),">=0"))
)多么?
# items in column中的每个元素rowOff:AverageIf获取从顶部开始的所有事物的平均值--取rowOff行,不包括everything # items in column旧溶液
这里有一个可以进入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"),"")))可读性:
=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"
),
""
)
))多么?
COUNTA(A2:A)的下三角矩阵COUNTA(A2:A)的所有1's和所有非空白的A2:A上使用MMULT实现运行和,如果该数字为负值,则将其滤除。在本例中,它生成{2;2;6;6;6;6}.COUNTIFS()生成一个要除以的元素数数组。在这里,{1;1;2;2;3;4}IF.IFERROR中的任何错误。(如果前导数为负数,可能会发生#DIV/0!错误。)。
发布于 2020-09-14 18:30:27
也许,这个公式可以帮助:
=ARRAYFORMULA(AVERAGE(IF($A$2:A2>=0,$A$2:A2,"")))

https://stackoverflow.com/questions/63889092
复制相似问题