数组公式中当前行的 COUNTA(Google 张)
COUNTA in current row in an array formula (Google Sheets)
我有一个 Google sheet 具有固定数量的列和动态行。
我喜欢使用 countA 来计算当前行中具有值(非空)的字段。
我找到了一个 formula here 但不明白,也不能让它工作。
ArrayFormula(MMULT( LEN(A1:E)>0 ; TRANSPOSE(SIGN(COLUMN(A1:E1)))))
Sheet 给我错误:"Function MMULT parameter 1 expects number values. But 'TRUE' is a boolean and cannot be coerced to a number."
你这个公式好像有点复杂,你把这个公式抄下来行不行
=COUNTA(A1:E1)
...但具体针对您的问题,您需要更改此部分
LEN(A1:E)>0
...所以它 returns 数字 - 尝试
IF(LEN(A1:E)>0;1;0)
如果您将 LEN(A1:E)>0 返回的布尔值(true 或 false)转换为数字(1 或 0),该公式应该有效,正如 Barry 已经提到的那样。这可以很容易地完成,只需将 LEN() 函数的输出包装在 N-function 中或在其前面加上“--”即可。因此,假设您的数据从第 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)))
如果您还想包含 header 行,请尝试:
=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),)))
我有一个 Google sheet 具有固定数量的列和动态行。
我喜欢使用 countA 来计算当前行中具有值(非空)的字段。
我找到了一个 formula here 但不明白,也不能让它工作。
ArrayFormula(MMULT( LEN(A1:E)>0 ; TRANSPOSE(SIGN(COLUMN(A1:E1)))))
Sheet 给我错误:"Function MMULT parameter 1 expects number values. But 'TRUE' is a boolean and cannot be coerced to a number."
你这个公式好像有点复杂,你把这个公式抄下来行不行
=COUNTA(A1:E1)
...但具体针对您的问题,您需要更改此部分
LEN(A1:E)>0
...所以它 returns 数字 - 尝试
IF(LEN(A1:E)>0;1;0)
如果您将 LEN(A1:E)>0 返回的布尔值(true 或 false)转换为数字(1 或 0),该公式应该有效,正如 Barry 已经提到的那样。这可以很容易地完成,只需将 LEN() 函数的输出包装在 N-function 中或在其前面加上“--”即可。因此,假设您的数据从第 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)))
如果您还想包含 header 行,请尝试:
=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),)))