假设我在 Excel 中有以下两个不同大小的数组:
数组_1 | 数组_2 |
---|---|
一个 | 一个 |
乙 | C |
D | 乙 |
乙 |
我想编写一个函数 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
item_X | item_Y | COMPARE_XY |
---|---|---|
美国广播公司 | 123 |
t_2
item_X | 顾客 |
---|---|
美国广播公司 | Α |
美国广播公司 | 贝塔 |
美国广播公司 | 三角洲 |
美国广播公司 | 厄普西隆 |
国防军 | Α |
... | ... |
t_3
item_Y | 顾客 |
---|---|
123 | Α |
123 | 卡帕 |
123 | 厄普西隆 |
456 | Α |
... | ... |
我想在 t_1 的空白单元格中编写 COMPARE 函数。我希望 ABC 从 t_2 和 123 拉 {Alpha, Beta, Delta, Epsilon} 从 t_3 拉 {Alpha, Kappa, Epsilon}。然后我希望它像上面讨论的那样比较这些数组。从 t_2 和 t_3 中提取这些数组很容易:它只是另一个 FILTER 函数。但是当我将这种技术与我上面勾勒的 COMPARE 函数的版本结合起来时,它给了我错误。具体来说,如果 COUNTIF 函数的参数是由动态数组函数提供的数组,它似乎会出错。
我希望有人还在我身边。有谁知道如何完成这项任务?
使用 FILTER 我们可以使用 ISERROR(MATCH()) 进行测试以进行比较: