在 google 电子表格中值从 TRUE 变为 FALSE 后,有没有办法停止 COUNTIF 函数?

Is there a way to stop a COUNTIF function after the value changes from TRUE to FALSE in google spreadsheets?

我有一排勾选框,我需要计算最近的连续 TRUE 个值。所以它应该在第一个 TRUE 出现时开始计数,并在它变为 FALSE 时停止,忽略之后的任何内容。

现在我有一个脚本可以做到这一点,但由于我有很多条目,所以需要很长时间才能 运行 并在 6 分钟后停止,而没有完成所有事情。

for(var j=3;j<lastRow;j++){
    count = 0;
    for (var k=stupac-1;k>2;k--){
      if (range.getCell(j,k).getValue() == true){
        count++;
      }
      else if ((range.getCell(j,k).isChecked() == false)&&(count>0)){
        break;
      }
    }
    range.getCell(j,stupac).setValue(count);
  }

我认为最好的方法是在值发生变化时停止 COUNTIF,但一直没有成功。

我想出了这个看起来相当快的解决方案。您的方法遍历每个 cell,这效率不高,尤其是当搜索 space 很大时。以下方法迭代指定 data 范围内的

function myFunction() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName('Sheet1');
  
  const data = sh.getRange('A3:G'+sh.getLastRow()).getValues();
  const counts = [];
  
  data.forEach(row=>{                  
               let t_index = row.indexOf(true);             
               let cutRow = t_index > -1 ? row.slice(t_index, row.length+1) : [];        
               let f_index = cutRow.indexOf(false);
               let ct = f_index > -1 ? f_index : cutRow.length;
               counts.push([ct]);                 
               });           
                
sh.getRange(3,8,counts.length,counts[0].length).setValues(counts);
                             
}

请根据需要调整数据范围。

这里的解决方案匹配以下文件:

请确保您已启用 V8 Runtime