在 Excel 中间接比较两个数组

在 Excel 中间接比较两个数组

假设我在 Excel 中有以下两个不同大小的数组:

数组1 数组2
A A
C

我想编写一个函数 COMPARE(array_1, array_2),该函数返回(作为数组)array_1 中所有不在 array_2 中的项;因此在这种情况下 COMPARE(array_1, array_2) 应该等于 {B, D}。COMPARE(array_2, array_1) 应该等于 {C}。

现在,如果两个数组都“在板上”,那么这很容易做到。假设 array_1 是 A2:A5,而 array_2 是 B2:B4。在这种情况下,COMPARE(array_1, array_2) = FILTER(array_1,NOT(COUNTIF(array_2, array_1)))。COUNTIF 用作动态数组函数,并为数组提供与 array_1 相同的维度。

问题如下:当数组不直接“在板上”时,我无法让它工作。也就是说,如果我的 COMPARE 函数的参数本身是动态数组函数的值,则 COMPARE 函数会中断。

我想到的具体用例涉及三个表。以下是虚拟版本:

t_1

项目_X item_Y 比较_XY
ABC 123

t_2

项目_X 顾客
ABC Α
ABC 测试版
ABC 三角洲
ABC 埃普西隆
防御 Α
... ...

t_3

item_Y 顾客
123 Α
123 河童
123 埃普西隆
456 Α
... ...

我想在 t_1 上的空白单元格中写入 COMPARE 函数。我希望 ABC 从 t_2 中提取 {Alpha, Beta, Delta, Epsilon},并让 123 从 t_3 中提取 {Alpha, Kappa, Epsilon}。然后我希望它比较这些数组,如上所述。从 t_2 和 t_3 中提取这些数组很容易:它只是另一个 FILTER 函数。但是当我将此技术与我上面概述的 COMPARE 函数版本结合使用时,它会给出错误。具体来说,如果 COUNTIF 函数的参数是动态数组函数提供的数组,它似乎会给出错误。

我希望有人仍然陪伴着我。有人知道如何完成这个任务吗?

答案1

使用 FILTER 我们可以用 ISERROR(MATCH()) 进行测试来比较:

=LET(x,FILTER(B2:B6,A2:A6=G2),y,FILTER(E2:E5,D2:D5=H2),FILTER(x,ISERROR(MATCH(x,y,0))))

在此处输入图片描述

相关内容