如何将此函数转换为数组函数?
How can I convert this function into an array function?
所以我这里有这个函数贯穿T2:T:
=IF($D<$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<$N2:N,"", AVERAGE(INDIRECT("P"&IF($N2:N<11, 2,$N2:N-5)&":P"&$N2:N+5))))
但是,它无法正常运行。它仍然占据相同数量的行,但每一行都是相同的值。最初第一行的值。我该如何解决这个问题?谢谢!
这里的问题是 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)
所以我这里有这个函数贯穿T2:T:
=IF($D<$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<$N2:N,"", AVERAGE(INDIRECT("P"&IF($N2:N<11, 2,$N2:N-5)&":P"&$N2:N+5))))
但是,它无法正常运行。它仍然占据相同数量的行,但每一行都是相同的值。最初第一行的值。我该如何解决这个问题?谢谢!
这里的问题是 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)