COUNTA在当前行中的数组公式(Google Sheets)
我有一个固定数量的列和dynamic行的Google工作表。
我喜欢使用countA来计算当前行中具有值(非空白)的字段。
我在这里find了一个公式,但是不明白,也没有办法。
ArrayFormula(MMULT( LEN(A1:E)>0 ; TRANSPOSE(SIGN(COLUMN(A1:E1)))))
工作表给我错误:“函数MMULT参数1期望数字值,但'真'是一个布尔值,不能被强制为一个数字。
如Barry已经提到的,如果您将由LEN(A1:E)> 0返回的布尔值(true或false)转换为数字(1或0),则公式应该可以工作。 这可以通过将LEN()函数的输出包装成一个N函数,或者用“ – ”作为前缀来完成。 所以,假设你的数据从第2行开始,看看这是否工作:
=ArrayFormula(MMULT( --(LEN(A2:E)>0) , TRANSPOSE(COLUMN(A2:E2)^0)))
另一种方法是使用COUNTIF()
=ArrayFormula(COUNTIF(IF(A2:E<>"", row(A2:A),),row(A2:A)))
甚至可能是一个组合应该工作:
=ArrayFormula(MMULT( --(A2:E<>"") , TRANSPOSE(COLUMN(A2:E1)^0)))
如果您还想包含标题行,请尝试:
=ArrayFormula(if(row(A:A)=1, "Header", MMULT( --(LEN(A:E)>0) , TRANSPOSE(COLUMN(A1:E1)^0))))
要么
=ArrayFormula(if(row(A:A)=1, "Header", MMULT( --(A:E<>"") , TRANSPOSE(COLUMN(A1:E1)^0))))
要么
=ArrayFormula(if(row(A:A)=1, "Header", COUNTIF(IF(not(isblank(A:E)), row(A:A),),row(A:A))))
编辑:(在新的问题中的意见)
如果你想总结这些值,你也可以用MMULT()来做到这一点:
=ArrayFormula(if(row(A:A)=1, "Header", MMULT(if(A1:E<>"", A1:E,0), transpose(column(A1:E1)^0))))
或使用sumif:
=ArrayFormula(if(row(A:A)=1, "Header", sumif(IF(COLUMN(A1:E1),ROW(A1:A)),ROW(A1:A),A1:E)))
注意:如果你想限制输出,让我们说在列A中的最后一行的值,尝试:
=ArrayFormula(if(row(A:A)=1, "Header", IF(LEN(A1:A), MMULT(if(A1:E<>"", A1:E,0), transpose(column(A1:E1)^0)),)))
或者再用sumif()
=ArrayFormula(if(row(A:A)=1, "Header", if(len(A1:A), sumif(IF(COLUMN(A1:E1),ROW(A1:A)),ROW(A1:A),A1:E),)))
那个公式似乎对你的解释有点复杂,你不能用这个公式拷贝下来
= COUNTA(A1:E1)
…但具体解决你的问题,你需要改变这个部分
LEN(A1:E)> 0
…所以它返回数字 – 尝试
IF(LEN(A1:E)> 0; 1; 0)