如果不同列中的条件满足,则列中的数字平均值

时间:2015-09-30 07:38:40

标签: javascript google-apps-script

我的数据范围是第一列是日期,第二列是数值。有些行的第二列值为空,我不希望它们被计算在内。

我试图找到第二列值的平均值,如果它们满足从今天起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++;
     }
   }

1 个答案:

答案 0 :(得分:1)

还有更多简单的版本。只需将目标单元格放入公式

即可

= ARRAYFORMULA(AVERAGE(IF(DATEDIF(C1:C; TODAY();&#34; d&#34;)&LT; = 90; E1:E)))

用带有日期的列替换C1:C,用带有数字的列替换E1:E。