【问题标题】:How can I convert this function into an array function?如何将此函数转换为数组函数?
【发布时间】:2016-01-01 02:04:55
【问题描述】:

所以我这里有这个贯穿 T2:T 的函数:

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

列 P 是从第 2 行开始的数字列表。列 N 是从第 2 行开始并在 P 结束 + 14 处结束的索引(每行上升 1),而 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))))

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

【问题讨论】:

    标签: google-sheets spreadsheet array-formulas


    【解决方案1】:

    这里的问题是 ARRAYFORMULA 不适用于 AVERAGE。 但是你总是可以使用 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)

    【讨论】:

    • 谢谢!我没有想过根本不使用数组公式。我什至创建了另一个不起作用的脚本。
    • 我发现你的函数在我展开 P 时不起作用,但是下面应该可以解决它:=avg(INDIRECT("P2:P"&(COUNTIF(P2:P, " 0")+1)), D29)
    猜你喜欢
    • 2020-06-07
    • 2020-09-03
    • 2020-07-22
    • 2020-10-10
    • 2021-11-03
    • 2020-08-20
    • 2022-12-06
    相关资源
    最近更新 更多