在Excel数组公式中,我想测试一个数组的每个元素对第二个数组的每个元素,当2个数组没有相同数量的元素时。向右简化,这种情况可以表示为:
= SUMPRODUCT({1,2,3,4,5} = {1,2})
注意 - 在我的真实世界场景中,这些数组是根据各种先前步骤计算出来的。
使用上面的例子,我希望得到{TRUE,TRUE,FALSE,FALSE,FALSE}的结果。我得到的是{TRUE,TRUE,#N / A,#N / A,#N / A}。
很明显,当测试的值超过1时,Excel需要2个数组中相同数量的元素;如果没有,#N / A错误填补了空白。
我考虑过编写一个UDF来实现我想要的东西,而且我很确定我的编码技巧可以创建类似的东西:
= ArrayCompare({1,2,3,4,5}, “=”,{1,2})
但是,如果不是太麻烦,我宁愿使用原生功能来做这件事......
那么,简单的问题;可以构造一个数组公式来做我想要的事情吗?
谢谢偷看!
答案 0 :(得分:3)
使用MATCH
函数可能是最好的方法.....但是如果你真的想在一个数组中将每个元素与另一个数组进行直接比较,那么一个应该是"列&# 34;和一个"行",例如
=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,因为有5x2比较并且它们都是TRUE
答案 1 :(得分:2)
也许:
{=IF(ISERROR(MATCH({1,2,3,4,5},{1,2},0)),FALSE,TRUE)}
答案 2 :(得分:1)
如果第二个数组是第一个数组的子集,相同的顺序,并从位置1开始,那么您可以使用此数组公式进行等效性测试:
=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
来匹配匹配,如下所示:
等效性测试:
=ISNUMBER(MATCH({1,2,3,4,5},{1,4,5},0))
非等效性测试:
=NOT(ISNUMBER(MATCH({1,2,3,4,5},{1,4,5},0)))
请记住所有数组公式都是使用 ctrl + shift + 输入
输入的