我正在构建一个谷歌电子表格,我将在该电子表格中输入一堆数据,然后在另一张表上,我想从中提取统计数据。我很难正确计算这些值。
我正在尝试完成的工作 - 构建一个可以添加到任何单元格的函数,以通过根据函数中的目标/参数计算重复值来获取特定列的统计信息。
例子:
表 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);
}