假设我在 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 函数的参数是动态数组函数提供的数组,它似乎会给出错误。
我希望有人仍然陪伴着我。有人知道如何完成这个任务吗?