如何在Excel中比较2个元素数量不等的元素
在Excel数组公式中,当两个数组没有相同数量的元素时,我想testing一个数组的每个元素对第二个数组的每个元素。 简而言之,这种情况可以表示为:
= SUMPRODUCT({1,2,3,4,5} = {1,2})
NB – 在我的现实世界中,这些arrays是从各种先前的步骤计算出来的。
使用上面的例子,我想要的结果{TRUE,TRUE,FALSE,FALSE,FALSE}。 我得到的是{TRUE,TRUE,#N / A,#N / A,#N / A}。
很显然,当有超过1个值被testing的时候,Excel需要在2个数组中有相同数量的元素; 当没有时,#N / A错误填充空白。
我已经考虑编写一个UDF来实现我想要的function,而且我非常确定我的编程技巧正在创build类似于:
= ArrayCompare({1,2,3,4,5}, “=”,{1,2})
但我宁愿这样做使用本地function,如果它不是太麻烦…
所以,简单的问题; 可以构build一个数组公式来做我以后的事情吗?
谢谢偷窥!
如果第二个数组是第一个数组的子集,相同的顺序,并从位置1开始,那么你可以使用这个数组公式进行等价性testing:
=IFERROR(IF({1,2,3,4,5}={1,2},TRUE),FALSE)
对于非等价交换FALSE
和TRUE
=IFERROR(IF({1,2,3,4,5}={1,2},FALSE),TRUE)
然后你可以像其他公式一样使用这个数组:
但是,如果数组不是有序的,如下例所示:
{1,2,3,4,5},{1,4,5}
那么你必须使用MATCH
。 然而,你所需要的就是用一个ISNUMBER
来包围比赛,如下所示:
等效性testing:
=ISNUMBER(MATCH({1,2,3,4,5},{1,4,5},0))
非等价性testing:
=NOT(ISNUMBER(MATCH({1,2,3,4,5},{1,4,5},0)))
记住所有的数组公式都是用ctrl + shift + enterinput的
也许:
{=IF(ISERROR(MATCH({1,2,3,4,5},{1,2},0)),FALSE,TRUE)}
使用MATCH
函数可能是最好的方法…..但是如果你真的想比较一个数组中的每个元素与另一个数组进行直接比较,那么应该是一个“列”和一个“行”,例如
=SUMPRODUCT(({1,2,3,4,5}={1;4})+0)
请注意第二个数组中的分号分隔符
如果你实际上不能改变列/行的指定,那么可以使用TRANSPOSE
,即
=SUMPRODUCT(({1,2,3,4,5}=TRANSPOSE({1,4}))+0)
如果数组包含重复项,则可能得不到所需的结果,因为这样您将得到一些重复计算,例如使用此公式
=SUMPRODUCT(({1,1,1,1,1}={1;1})+0)
结果是10,因为有5×2的比较,它们都是TRUE