【问题标题】:Google Sheets sum after last criteria cell最后一个标准单元格后的 Google 表格总和
【发布时间】:2021-12-22 18:56:24
【问题描述】:

为此找不到任何东西,我的大脑一直在寻找面向对象的解决方案,据我所知,该解决方案无法在这里实现。

a b
1 10
2 11
-3 10
4 11
5 13

我有一个包含以下数据的谷歌表,我想弄清楚如何获取 b 列值的总和,但仅限于 a 列中最后一个已知负数之后的那些值。

IE:公式应该给我 11 和 13 = 24 的总和,因为只有 4 和 5 是最后一个已知负数之后的正数。

【问题讨论】:

    标签: google-sheets google-sheets-formula


    【解决方案1】:

    试试这个:

    =ARRAYFORMULA(SUM(INDIRECT("B"&MATCH(LOOKUP(9^9,IF(A1:A<0,A1:A)),A1:A,0)+1&":B")))

    零散地看这个公式:

    1. 查找范围内的最后一个负数: LOOKUP(9^9,IF(A1:A<0,A1:A))

    2. 找到它在范围内的位置,加1得到下一个位置:MATCH(<formula in step 1>),A1:A,0)+1

    3. 使用间接建立总和范围。 SUM(INDIRECT("B"&<formula in step 2>&":B"))

    4. 封装在ARRAYFORMULA中获取结果。

    示例:

    【讨论】:

    • 所以这个工作很好,但是当你有多个负数时就会出现问题。如果我还有一行-6 ,10,则显示为 0;这是正确的如果我添加另一行7,13,它显示13,这也是正确的。但是,如果我将第 6 行从 -6,10 更改为 -3,10,它会显示 47,这是不对的。正确的值仍然是 13。
    • 顺便说一句,我确实在技术上解决了这个问题,但是使用“Apps Scripts”制作了一个自定义功能。但该解决方案更多地基于脚本,并且需要一些 JS 编码。
    【解决方案2】:

    我能够通过 Apps Scripts 制作自定义函数来解决这个问题。

    功能很基础。

    function sumFromLastNeg(data) {
      var run_sum = 0;
      for (var i = 0; i < data.length; i++) {
        if (data[i][0] >= 0){
          run_sum += data[i][1];
        }
        else if (data[i][0] < 0){
          run_sum = 0;
        }
      }
      return run_sum;
    }
    

    函数的调用方式如下=sumFromLastNeg(A1:B)

    我最初的想法是我无法做到这一点,但通过寻找解决方案,我在 google sheet 中找到了脚本。

    希望这对人们有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-28
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多