Google sheets 如何将此函数转换为数组函数?

Google sheets 如何将此函数转换为数组函数?,google-sheets,spreadsheet,array-formulas,Google Sheets,Spreadsheet,Array Formulas,这里有一个贯穿T2:T的函数: =IF($D$29<$N2,"", AVERAGE(INDIRECT("P"&IF($N2<11, 2,$N2-5)&":P"&$N2+5))) p列是从第2行开始的数字列表。列N是一个索引,每行递增1,从第2行开始,到P结束+14为止,D29只是一个数字。在我目前的情况下,P在第11行结束,N在第25行结束。我试图把它变成一个数组公式,这样当我添加新行时,它会自动更新。所以在改变它之后,我得到了这个: =ARRAYFORMU

这里有一个贯穿T2:T的函数:

=IF($D$29<$N2,"", AVERAGE(INDIRECT("P"&IF($N2<11, 2,$N2-5)&":P"&$N2+5)))
p列是从第2行开始的数字列表。列N是一个索引,每行递增1,从第2行开始,到P结束+14为止,D29只是一个数字。在我目前的情况下,P在第11行结束,N在第25行结束。我试图把它变成一个数组公式,这样当我添加新行时,它会自动更新。所以在改变它之后,我得到了这个:

=ARRAYFORMULA(IF($D$29<$N2:N,"", AVERAGE(INDIRECT("P"&IF($N2:N<11, 2,$N2:N-5)&":P"&$N2:N+5))))

但是,它没有正常运行。它仍然占用相同数量的行,但每行的值都相同。最初第一行的值。我如何解决这个问题?谢谢

这里的问题是,ARRAYFORMULA不适用于平均值。 但您可以始终使用javascript。 打开脚本编辑器并粘贴此代码

function avg(nums, d) {
  var r = [],
      i, j, start, end, avg, count;
  for(i = 0; i < nums.length; i++) {
    if(d <= i) r.push([""]);
    else {
      if(i < 10) start = 0;
      else start = i - 5;
      end = i + 4;
      avg = 0, count = 0;
      for(j = start; j <= end; j++) {
        if(nums[j]) {
          avg += nums[j][0];
          count++;
        }
      }
      r.push([avg / count]);
    }
  }
  return r;
}

保存它,返回您的电子表格并将此公式放入任意单元格=avgP2:P11,D29

谢谢!我没有想到不使用数组公式。我甚至创建了另一个不起作用的脚本。当我展开P时,我发现您的函数不起作用,但是下面应该可以解决它:=avgINDIRECTP2:P&COUNTIFP2:P,0+1,D29