2

我正在构建一个谷歌电子表格,我将在该电子表格中输入一堆数据,然后在另一张表上,我想从中提取统计数据。我很难正确计算这些值。

我正在尝试完成的工作 - 构建一个可以添加到任何单元格的函数,以通过根据函数中的目标/参数计算重复值来获取特定列的统计信息。

例子:

表 1 包含我需要在 E 列中计算的数据(包含 1 或 2 个字母以指示状态。表 2 是我将提取所有统计数据的地方。我添加了一个像这样的函数:=getData("A")

函数本身已经指向 sheet1 和 E 列。函数在这里说的是,“我希望你提取 E 列中的所有数据并告诉我有多少单元格被标记为 A”,然后给我计数.

我有大约 5 个不同的值,我会在这里独立搜索。我们会说 A、B、C、D 和 E。所以如果我去搜索 C,我会使用:=getData("C") 将统计信息拉到我的统计表上的另一个单元格中

到目前为止我所得到的(那行不通) - 我对这些东西的编码很粗略,所以我还在学习很多东西。这是我到目前为止所尝试的:

function getData(target) {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SHEET1");
  var lrow = ss.getLastRow();
  var r = ss.getRange(2, 5, lrow, 1);
  var data = r.getValues();
  var count;

  for (var i = 0; i < lrow ; i++) {
    var count = 1;
    for (var j = 0; j < i; i++) {
      if (data[j][0].value(target) == data[i][0].value(target)) {
        count++;
      }
    }
  return (count);
  }
}

我也试过: if (data.value() == target) { count++; }

但这似乎也无济于事。我究竟做错了什么?要么我没有正确计算和/或没有提取数据来正确计算它。我已经搜索了很多帖子,似乎无法将我需要的东西放在一起。

我感谢任何人可以提供的任何帮助。谢谢。


已解决的代码(感谢@ScampMichael) - 这种细微的变化实际上允许我使用 =getData("Example1","Example2") 格式搜索多个值并计算总数:

function getData(target1, target2) {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SHEET1");
  var lrow = ss.getLastRow();
  var r = ss.getRange(2, 5, lrow-1, 1); // lrow-1 to not count header
  var data = r.getValues();
  var count = 0; // 0 must be declared here or you'll get error: Overflow on the spreadsheet

  for (var i=0; i<data.length; i++) {
    if (data[i][0] == target1) { // can repeat this part depending how many values you want to search for
      count++;
    }
    if (data[i][0] == target2) {
      count++;
    }
  }
  return (count);
}
4

1 回答 1

2

编辑:我错过了 var r = ss.getRange(2, 5, lrow, 1); 应该

 var r = ss.getRange(2, 5, lrow - 1, 1);  // because starting at row 2

因为您的源数据只有一列宽,所以您不需要循环中的循环,但我已将其保留,以防您希望源中包含多列。

  for (var i = 0; i < data.length ; i++) {
    for (var j = 0; j < data[i].length; j++) {
      if (data[i][j] == target) {
        count++;
      }
    }
  }

对于单个列,您可以:

  for (var i = 0; i < data.length ; i++) {
      if (data[i][0] == target) {
        count++;
    }
  }

还有内置函数:=COUNTIF(SHEET1!E2:E,"A")

于 2013-04-10T15:52:17.517 回答