【问题标题】:COUNTA in current row in an array formula (Google Sheets)数组公式中当前行中的 COUNTA(Google 表格)
【发布时间】:2015-05-22 09:23:02
【问题描述】:

我有一个具有固定列数和动态行数的 Google 表格。

我喜欢使用 countA 来计算当前行中具有值(非空白)的字段。

我找到了formula here,但不明白,也无法正常工作。

ArrayFormula(MMULT( LEN(A1:E)>0 ; TRANSPOSE(SIGN(COLUMN(A1:E1)))))

Sheet 给我错误:“函数 MMULT 参数 1 需要数字值。但 'TRUE' 是布尔值,不能强制转换为数字。”

【问题讨论】:

    标签: arrays excel count google-sheets row


    【解决方案1】:

    如果您将 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)))
    

    如果您还想包含标题行,请尝试:

    =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))))
    

    编辑:(在 cmets 新问题之后)

    如果你想对这些值求和,你也可以用 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)))
    

    注意:如果您想将输出限制为假设最后一行在 col 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),)))
    

    【讨论】:

    • 感谢 JPV,我使用了第一个版本,包括标题,效果很好!
    • 另外两个也可以完成这项工作。 :)
    • 我尝试将数组中的 COUNTIF 替换为 SUMIF 以添加字段的值,但没有得到正确的结果,有什么提示吗?
    • 嗨,Ricardo,我已经更新了我的答案。看看它是否适合你?
    • 哦,强大的 excel 向导 - 感谢您的帮助 =) 也许您对这个问题也有想法? SUMIFS & formating
    【解决方案2】:

    这个公式你的解释好像有点复杂,你不能把这个公式抄下来吗

    =COUNTA(A1:E1)

    ...但具体解决您的问题,您需要更改这部分

    LEN(A1:E)>0

    ...让它返回数字 - 尝试

    IF(LEN(A1:E)>0;1;0)

    【讨论】:

    • 感谢您的回复,可以是任何其他公式,但我不能将它们复制为动态行数。表单添加了新的行和公式计算发送自动回复的价值。
    • 该公式在您适应后有效!谢谢 :) 我怎样才能将它们也显示在正确的行中?
    • 您实际上是在 Google 表格或 Excel 中执行此操作吗?
    • Google 表格 - 结果都是从一行到高的,还覆盖了冻结的行标题。其他列使用: =ARRAYFORMULA(IF(ROW(A:A)=1,"NAME", FORMULA) 但这不起作用。
    • 感谢巴里,该公式与 JPV 提供的头部相结合。
    猜你喜欢
    • 2019-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-04
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    相关资源
    最近更新 更多