如何比较 Excel 中元素数量不相等的 2 个数组

How to compare 2 arrays with unequal numbers of elements in Excel

在 Excel 数组公式中,当两个数组的元素数量不同时,我想针对第二个数组的每个元素测试一个数组的每个元素。简化下来,这种情况可以表示为:

=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})

但如果不是太麻烦的话,我更愿意使用本机功能...

所以,简单的问题;可以构造一个数组公式来完成我想要的吗?

谢谢大家!

也许:

{=IF(ISERROR(MATCH({1,2,3,4,5},{1,2},0)),FALSE,TRUE)}

如果第二个数组是第一个数组的子集,顺序相同,从位置 1 开始,则可以使用此数组公式进行等价测试:

=IFERROR(IF({1,2,3,4,5}={1,2},TRUE),FALSE)

如果不等价,只需交换 FALSETRUE

=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 + enter

使用 MATCH 函数可能是最好的方法......但是如果你真的想在直接比较中将一个数组中的每个元素与另一个数组进行比较,那么一个应该是 "column" 和一个 "row",例如

=SUMPRODUCT(({1,2,3,4,5}={1;4})+0)

注意第二个数组中的分号分隔符

如果您实际上无法更改 column/row 名称,则可以使用 TRANSPOSE,即

=SUMPRODUCT(({1,2,3,4,5}=TRANSPOSE({1,4}))+0)

如果数组包含重复项,您可能得不到所需的结果,因为这样您会得到一些重复计算,例如用这个公式

=SUMPRODUCT(({1,1,1,1,1}={1;1})+0)

结果是10,因为有5x2比较,都是TRUE