这是一个非常有趣的问题,需要相当技术性的答案。
基本上,MATCH 要求查找数组属于某种“类型”。这并不是说这个数组不能只包含单个元素(它可以),而是说它的形式与 MATCH 期望为其第二个参数传递的形式兼容。
这种可接受的形式可以是值数组或对(连续的)一维工作表单元格范围的引用。
当您执行:
=INDEX(K1:K2,MATCH(TRUE,K1:K2<0,0),)
这解决了:
=INDEX(K1:K2,MATCH(TRUE,{TRUE;FALSE},0),)
所以查找数组, i.e.:
{TRUE;FALSE}
是一个数组,即可接受的形式。
但是,当您执行:
=INDEX(K1:K2,MATCH(TRUE,K1:K1<0,0),)
那么这就解决了:
=INDEX(K1:K2,MATCH(TRUE,TRUE,0),)
而这一次的查找数组(TRUE) 是单个布尔值,不满足该参数的类型要求。
然而,我们可以人为地强制该单一值,以便它is正确的类型,即:
=INDEX(K1:K2,MATCH(TRUE,IF({1},K1:K1)<0,0),)
这次决定:
=INDEX(K1:K2,MATCH(TRUE,{-10})<0,0),)
这是:
=INDEX(K1:K2,MATCH(TRUE,{TRUE},0),)
现在,单个布尔值在技术上是数组的一部分(尽管该数组仅包含单个值),以上内容可根据需要进行解析。
作为此行为的另一个示例,假设单元格 A1 包含值 1。然后:
=MATCH(1,A1,0)
正确返回 1,因为,即使查找数组这里是单身
单元格,它(与所有工作表范围一样)在技术上仍然是数组类型。
但是,如果我们做一些小的改变,例如:
=MATCH(1,N(A1),0)
那么,即使这解析为:
=MATCH(1,1,0)
因此,看起来根本没有任何改变,事实上,通过将范围引用 A1 与其实际值“解除引用”,我们现在将其设置为无效类型,以作为查找数组,上述结果导致错误。
在我看来,MATCH 的这种行为往好了说是不一致,往坏了说是设计错误。
的结果:
=INDEX(K1:K2,MATCH(TRUE,K1:K1<0,0),)
should be:
=INDEX(K1:K2,MATCH(TRUE,{TRUE},0),)
我们不必通过额外的人为手段来强制它。
出于某种原因,如果传递的数组仅包含一个值,那么该值首先被“解析”为非数组类型,这与那些包含多个值的数组不同,对于这些数组,它们的数组类型是保留。
Regards