【问题标题】:ARRAYFORMULA and COUNTA to count only up to current rowARRAYFORMULA 和 COUNTA 仅计数到当前行
【发布时间】:2020-04-09 21:05:34
【问题描述】:

在 D 行,我想计算 E 行 (COUNTA) 的值,但只计算该列的当前行。 我尝试使用 ARRAYFORMULA 和 COUNTA 和 ROW,但根据我的阅读,COUNTA 不适用于 ARRAYFORMULA。我用这个公式得到的是每行返回的列的总 COUNTA。

我需要自动将公式应用于行(和新行),因此我打算使用 ARRAYFORMULA。但是,我也在研究 QUERY 函数,但无济于事。我认为我的解决方案可能是脚本,但我对它们还不是很有信心。

【问题讨论】:

  • 分享您的工作表副本

标签: google-apps-script google-sheets


【解决方案1】:

试试这样:

=COUNTA(IFERROR(INDIRECT("E1:E"&ROW())))

【讨论】:

  • 我编辑了我的帖子,以包括我需要自动填充公式以应用于所有行。这就是我最初使用 ARRAYFORMULA 的原因,但它似乎不适用于 COUNTA。
  • 请在您的答案中添加一些解释,以便其他人可以从中学习
【解决方案2】:

我想通了。事实证明,我认为解决方案是一个应用程序脚本是对的。这是我的代码:

function myFunction() {

  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  ss.getRange("D2").setFormula("=IF(ISBLANK($A2),,COUNTA(INDIRECT($F2)))");

  var lr = ss.getLastRow();
  var downRange = ss.getRange(2, 4, lr-1);

  ss.getRange("D2").copyTo(downRange);

}

【讨论】:

    【解决方案3】:

    D1:

     =ARRAYFORMULA({"What I Want";
      IF(ISBLANK(E2:LOOKUP(2,1/(E:E<>""),E:E)),,
        COUNTIFS(SEQUENCE(LOOKUP(2,1/(E:E<>""),SEQUENCE(2^20))-1),
            "<="&SEQUENCE(LOOKUP(2,1/(E:E<>""),SEQUENCE(2^20))-1),
        E2:LOOKUP(2,1/(E:E<>""),E:E),
            "<>"
        )
      )
    })
    

    注意事项:

    从内部,

    • LOOKUP(2,1/(E:E&lt;&gt;""),E:E) - LOOKUP 提供最后一个空范围1
    • E2:LOOKUP(..) 提供了一个范围:E2:E11 在这种情况下。此语法可用于创建动态范围
    • LOOKUP(...,SEQUENCE(2^20)) 提供最多 2^20(~36k) 行的最后一个空行号
    • SEQUENCE(LOOKUP(...)) 提供从 1 到最后一行的数字序列。
    • SEQUENCE(), "&lt;="&amp;SEQUENCE()COUNTIFS 提供了运行总计的逻辑。第一个序列创建一个升序数字数组(如 1,2,3...)。第二个序列提供了一个升序标准数组(如 2 时,满足两个条件(
    • COUNT rows IF 满足上述条件且 E:E 不为空 ("")
    • IF(ISBLANK) 清空空格

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-21
      • 2022-12-20
      • 1970-01-01
      • 1970-01-01
      • 2020-09-23
      • 1970-01-01
      相关资源
      最近更新 更多