答案1
在最新版本的 Excel 中,所有这些公式都将起作用,因为此时OFFSET
可以返回动态数组。
看来您使用的是较早版本的 Excel。我能够使用“@”运算符模拟您所看到的行为。
只要您引用的范围不包含您输入公式的行,此调用就会OFFSET
返回错误。因此,您会在尝试计算的范围上方和下方都收到 #VALUE! 错误:#VALUE!
您还会发现,对于左侧或右侧的公式,如果将它们上下拖动,则只要公式超出或低于函数内引用的行限制,它们就会开始显示错误:
我猜想在早期版本的 Excel 中,他们试图避免将数组返回到可能与其他数据重叠的区域。因此,您返回的数组元素始终与参考区域/数组位于同一行。
至于问题SUMPRODUCT
,它返回零,因为 OFFSET 正在产生错误,该错误被视为零。
不管怎样,数组维度必须相同,所以即使 OFFSET 在这里没有返回错误,SUMPRODUCT 也会返回,因为第二个参数中只有一个值。
一般来说,我认为如果您的 Excel 版本不支持动态数组,您应该尝试提出一种不以这种方式使用偏移的方法。如果您编辑帖子以包含有关预期结果和目的的更多详细信息,我可以尝试提供帮助。
答案2
OFFSET
似乎不会生成SUMPRODUCT
可以使用的数组。当使用 内部计算公式艺术时会生成F9
,但是...当 Excel 以任何方式执行时不会生成。
但是,OFFSET
正如所见,IS 会在内部生成一个数组F9
。需要做的就是强制(“强迫”)Excel 使用它。
用它包装INDEX
(如INDEX(OFFSET(...),,1)
捕获所有行)可以防止 Excel 丢失OFFSET
数组。
然后,当然,正如FlexYourData
指出的那样,必须匹配数组结构,以便简单地SEQUENCE(ROWS($I$4:$I$22),1,3,0)
完成公式。
如果使用旧版本,最后一个数组的构建方式不同,但很容易。因此,对于旧版本,唯一真正的问题是是否SUMPRODUCT
会使用这些部分。从结构上讲,没有问题,因为它对于普通的“Enter”输入来说是正确形成的,但如果不是,则始终有“Control-Shift-Enter”(“{CSE}”)。唯一的问题是它是否采用数组或将它们切割为一个值(=9)。但像这样的函数SUMPRODUCT
是专门为此而编写的,所以我相信它应该可以正常工作。
(当然,您似乎想要一列 19 个条目,因此选择单元格并使用“{CSE}”条目似乎是明智的。)