[英]Excel #VALUE! error when selecting a subset from a range using INDEX : INDEX or SEQUENCE based on calculated start, end values
这是一个假设示例,用于显示以下几种情况下的 Excel 奇怪行为,其中通过INDEX:INDEX
或INDEX
and SEQUENCE
选择范围的子集,其中范围子集或序列的start
和end
位置通过以下方式计算INDEX
或FILTER
。
场景如下:我有一个输入范围,其值: {1;2;3;4}
在范围内: A1:A4
我想将2
到4
的范围与预期结果9
相加,但为了说明重点是,我将计算这些数字以检查偶数条件。 以下公式考虑了几个用例:
INDEX(a,start):INDEX(a, end)
获取子集,其中start
和end
为计算字段, a
为输入范围。INDEX(a, SEQUENCE(rows,, start)
获取子集,其中rows
和start
是计算字段, a
是指输入范围。 作为我研究的一部分并试图找到解决方法,我使用两种方法来计算子集的start
和end
:
X
的名称表示的INDEX
。Y
表示的INDEX
。 例如XLOOKUP
或FILTER
。 以下是通过VSTACK/HSTACK
涵盖四种情况的公式,可在一次调用中比较所有情况:
=LET(a, A1:A4, even, FILTER(a, MOD(a,2)=0),
startX, INDEX(even, 1), endX, INDEX(even,2),
startY, XLOOKUP(2, even, even), endY, FILTER(even, even > startX),
caseA, IFERROR(SUM(INDEX(a,startX):INDEX(a, endX)), "ERROR"),
caseB, IFERROR(SUM(INDEX(a, SEQUENCE(endX-startX+1,, startX))), "ERROR"),
caseC, IFERROR(SUM(INDEX(a,startY):INDEX(a, endY)), "ERROR"),
caseD, IFERROR(SUM(INDEX(a, SEQUENCE(endY-startY+1,, startY))),"ERROR"),
VSTACK({"caseA", "caseB", "caseC", "caseD"},
HSTACK(caseA, caseB, caseC, caseD))
)
它返回一个错误: #VALUE!
或错误的结果。 如果我用MIN
包装FILTER
,这并不是真正必要的,因为FILTER
返回单个值,它可以工作:
同样,如果我用MIN
包装startX
、 endX
,它也可以工作。
注意事项:
a
每个地方使用A2:A4
提供相同的结果。IFERROR
防止VSTACK/HSTACK
在发生错误时返回单个值。我做错了什么还是可能是错误?
如果您构建更简单的示例来说明您的观点,我认为这对您和那些希望帮助您的人都有好处。 此外,使用Evaluate Formula工具可能有助于指导您进行解释。
这里没有错误,您看到的行为一直存在于 Excel 中。
使用与A1:A4
中相同的条目,我将使用以下简化示例来解释正在发生的事情:
=INDEX(H1:H10,FILTER(A1:A4,A1:A4=1))
查看Evaluate Formula工具,您可以看到这解析为:
=INDEX(H1:H10,{1})
这在技术上与
=INDEX(H1:H10,1)
并建议FILTER
返回一个数组,尽管它只包含一个值。
对于被指示返回单元格值的函数,传递此数组没有问题。 上面的例子就是这样,不会报错。
但是,如果我们将其扩展为:
=SUM(INDEX(H1:H10,FILTER(A1:A4,A1:A4=1)):INDEX(H1:H10,FILTER(A1:A4,A1:A4=1)))
然后,通过以这种方式使用INDEX
,我们要求它返回一个单元格引用,而不是一个单元格值,即我们要求
=SUM(INDEX(H1:H10,{1}):INDEX(H1:H10,{1}))
被解释为
=SUM(H1:H1)
尽管这样的结构不允许 arrays。
OFFSET
和INDIRECT
是另外两个可以返回单元格引用并表现出类似行为的函数。
=OFFSET(H1,1,0)
和
=INDIRECT("H"&1)
是有效的,而
=OFFSET(H1,{1},0)
和
=INDIRECT("H"&{1})
不是。
当然,在所有这些情况下,单值数组都可以通过一些 function(例如SUM
、 MIN
)强制转换为非数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.