我的数据范围是第一列是日期,第二列是数值。有些行的第二列值为空,我不希望它们被计算在内。
我试图找到第二列值的平均值,如果它们满足从今天起3个月之前的标准(不应计算空白值)。
但是我被困住了,因为我甚至无法得到完全正确的信息。我不知道如何进一步获得平均值。
下面的代码似乎给了我附加的字符串,而不是用数学方式总结数字。
有人可以帮忙吗?
提前致谢。
function average() {
// open spreadsheet
var spreadsheet = SpreadsheetApp.openById("spreadsheetID");
// set the named sheet as active
var sheet = SpreadsheetApp.setActiveSheet(spreadsheet.getSheetByName("SheetName"));
// figure out what the last row is
var lastRow = spreadsheet.getSheetByName("Form responses 1").getLastRow();
// the rows are indexed starting at 1, and the first row is the headers, so start with row 2
var startRow = 2;
// get the data range
var responsesValues = spreadsheet.getSheetByName("Form responses 1").getRange("A1:Q" + lastRow).getValues();
// define the dates
var timeToday = new Date().getTime();
var dateToday = new Date().getDate();
var date = new Date();
var threeMonthsAgo = new Date(date.getFullYear(), date.getMonth() - 3, 0);
// grab column 1 (date of entry column) (second variable in getRange function below)
var dataRange = sheet.getRange(2,1,lastRow-startRow+1,1 );
var numRows = dataRange.getNumRows();
var dateOfEntryValues = dataRange.getValues();
// grab column 2 (values to be averaged)
range = sheet.getRange(2, 2, lastRow-startRow+1, 1);
var Values = range.getValues();
var warning_count = 0;
var sumValues = 0;
// Loop over the values
for (var i = 0; i <= numRows - 1; i++) {
var dateOfEntry = dateOfEntryValues[i][0];
if(dateOfEntry > threeMonthsAgo && dateOfEntry !== "") {
// if it's within 3 months ago, add the values.
sumValues += Values[i][0];
warning_count++;
}
}
答案 0 :(得分:1)
还有更多简单的版本。只需将目标单元格放入公式
即可= ARRAYFORMULA(AVERAGE(IF(DATEDIF(C1:C; TODAY();&#34; d&#34;)&LT; = 90; E1:E)))
用带有日期的列替换C1:C,用带有数字的列替换E1:E。