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)