我正在尝试使用 Excel 计算第二行每个单元格前三个条目的总和,并通过第一行中的 BOOL 进行“索引”。
我希望使用偏移量来过滤,但显然不可能使用它。
现在我正在考虑使用 SUMIF 和部分和的差值,但我想找到一种更简单的方法。
输出应该是第三行。
谢谢
0 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
17 | 4 | 0 | 四十四 | 6 | 0 | 87 | 四十五 | 三十六 | 8 | 0 | 1 | 三十九 | 三十九 | 41 | 三十 |
0 | 0 | 0 | 0 | 四十八 | 四十八 | 四十四 | 四十四 | 四十四 | 80 | 80 | 80 | 三十七 | 76 | 79 | 119 |
这里
A1:P1
映射为x
且。A2:P2
y
c
用作函数,它需要输入e
,并且只取最后一行,A1:[input range offset -1 column]
这意味着如果输入是,y
它将返回输入列的范围。例如,如果y
是,E2
e(y)
则返回TAKE(A1:D2,-1)
接下来,
d
我们将 和 结合起来TOCOL(c(y)/c(x),2)
,其中y
前一列的值x
除以 前一列的值。其中0
中的任何一个x
都会强制执行 #DIV/0 错误。该TOCOL
参数2
会跳过这些错误值。有可能
d
还不包含 3 条记录,因此将其ROWS(d)=3
乘以BOOLEANSUM(d)
或者非 LAMBDA 解决方案:
不是最好的,但是。公式在
B3
右边拖拽:结果:
这是溢出公式,但要长得多
我本可以使用 Take 而不是 a1:index...
您可以使用
另一种方法是使用
SCAN
自定义LAMBDA
函数来存储正在运行的布尔计数,加上每次迭代的最后 3 个“标记”值,然后MAP
调用并SUM
得到结果:这看起来可能很多,但如果没有
FILTER
每次迭代的额外负担,它在更大的数据集上仍然会保持相对高效(尽管不如@Pb 的MMULT
解决方案那么快)。