我正在制作一个Google电子表格,我会在该电子表格中输入大量数据,然后在另一张表格中,我想从中提取统计数据。我正好难以正确计算数值。
我正在努力实现的目标 - 构建一个函数,我可以添加到任何单元格,通过根据函数中的目标/参数计算重复值来获取某列的统计信息。
示例:
工作表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) - 这种轻微的变化实际上允许我使用format = 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);
}
答案 0 :(得分: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”)