首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将此函数转换为数组函数?

如何将此函数转换为数组函数?
EN

Stack Overflow用户
提问于 2015-10-04 07:54:12
回答 1查看 45关注 0票数 0

我这里有一个函数,它贯穿T2:T:

代码语言:javascript
复制
=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行。我试图将其转换为数组公式,以便当我添加新行时,它会自动更新。所以在改变它之后,我得到了这个:

代码语言:javascript
复制
=ARRAYFORMULA(IF($D$29<$N2:N,"", AVERAGE(INDIRECT("P"&IF($N2:N<11, 2,$N2:N-5)&":P"&$N2:N+5))))

然而,它没有正常运作。它仍然占用相同的行数,但每一行都是相同的值。第一行的值。我怎样才能解决这个问题?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-04 10:20:08

这里的问题是ARRAYFORMULA不适用于平均值。但你可以一直使用javascript。打开脚本编辑器并粘贴到这段代码中。

代码语言: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;
}

保存它,回到您的电子表格,并将此公式放入任何单元格=avg(P2:P11, D29)中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32931272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档