【问题标题】:How can I sum the values of cells in a row more efficiently?如何更有效地对连续单元格的值求和?
【发布时间】:2020-05-12 13:51:29
【问题描述】:

您好,我已经搜索并尝试了很长时间,但我无法得到它。 在图片上你可以看到我的 Google Sheet。

我只想将行中所有

如何简化下面的代码?有人有想法吗? 非常感谢!



function calculationFirstColumn() {

var sheet = SpreadsheetApp.getActiveSheet();
var originalData = sheet.getRange(2, 2, sheet.getLastRow() -1, 1).getValues();

var filteredItems = originalData.filter(function(x){return x==1}).length;
var filteredItems2 = originalData.filter(function(x){return x==2}).length;
var filteredItems3 = originalData.filter(function(x){return x==3}).length;
var filteredItems4 = originalData.filter(function(x){return x==4}).length;
var filteredItems5 = originalData.filter(function(x){return x==5}).length;
var filteredItems6 = originalData.filter(function(x){return x==6}).length;
var filteredItems7 = originalData.filter(function(x){return x==7}).length;
var filteredItems8 = originalData.filter(function(x){return x==8}).length;
var filteredItems9 = originalData.filter(function(x){return x==9}).length;
var filteredItems10 = originalData.filter(function(x){return x==10}).length;

var total = filteredItems+filteredItems2+filteredItems3+filteredItems4+filteredItems5+
            filteredItems6+filteredItems7+filteredItems8+filteredItems9+filteredItems10;

sheet.getRange("B18").setValue(total); 


}

【问题讨论】:

  • 为什么不使用for 循环?
  • 我试过了,但它不起作用。你能帮我写“for循环”代码吗?
  • 对不起,没有。您需要展示您的努力并提出更具体的问题。因为你主要是在寻找代码审查。我会修改以重新开始循环。然后我们可以提供帮助。

标签: javascript arrays google-sheets


【解决方案1】:

您不需要使用过滤器,而是使用循环和条件语句的组合:

function calculationFirstColumn() { 
  var sheet = SpreadsheetApp.getActiveSheet();
  var originalData = sheet.getRange(2, 2, sheet.getLastRow() -1, 1).getValues();
  var total = 0;
  for (var i = 0; i < originalData.length; i++){
    if(originalData[i][0] <= 10){
      total += originalData[i][0];
    }
    Logger.log(total);
  }
  sheet.getRange("B18").setValue(total); 
}

【讨论】:

  • 数字相加。我想使用该函数来计算一个数字在列中出现的频率。示例: if (originalData [i] [0] == 13) { 函数用这一行在工作表上写入 13。但我想让他写一个 1,因为数字 13 在第一列中只有一次。
  • 在这种情况下:if (originalData [i] [0] == 13) { total++;} 将在每次找到 13 时将 total 加 1。
  • 如果我想计算所有小于 10 的数字?不幸的是,如果 (originalData [i] [0] 这不起作用
  • 可以,但您必须确保不计算空单元格:if(originalData[i][0] &lt;= 10 &amp;&amp; originalData[i][0] !=''){ total ++; }
【解决方案2】:

这样的事情真的需要脚本吗?

=SUMIF(B2:B,"

【讨论】:

    【解决方案3】:

    @ziganotschka 谢谢! 你的最后一个答案有效。但我还有一个理解问题。

    NO EMPTY CELL - PICTURE

    原始数据。要评估的区域明确定义,其中没有空单元格。那为什么这个函数需要指令呢?

    if(originalData[i][0] <= 10 /*&& originalData[i][0] !=''*/){ total ++; }
    

    如果没有此附加行,此函数会计算哪些单元格?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-17
      • 1970-01-01
      相关资源
      最近更新 更多