【发布时间】:2020-08-12 10:17:25
【问题描述】:
我在A:A 和B:B 中有两组值。如何在它们之间设置差异(最好使用公式),即从A:A 中获取那些在B:B 中不存在的值?
【问题讨论】:
标签: google-sheets
我在A:A 和B:B 中有两组值。如何在它们之间设置差异(最好使用公式),即从A:A 中获取那些在B:B 中不存在的值?
【问题讨论】:
标签: google-sheets
这样的公式可以做到这一点,而且速度非常快:
=filter(A:A,countif(B:B,A:A)=0)
【讨论】:
=query(A:A, "select A where A != '"&join("' and A != '",B:B)&"'")
COUNTIF(range, x) 在第二个参数槽 x 中有一个范围类型的参数。另请参阅我在 marc meyer 的回答中添加的注释,这可能会“忽略”或“隐藏”某些结果。
COUNTIF(range, range) 发生了什么。这究竟是如何工作的???这是否适用于A:A 的每个单元格?当我把它放到一个单独的单元格中时,它只返回一个TRUE,所以我不确定它是如何为我们正在过滤的A:A 的每个部分运行的。有人可以帮忙解释一下这实际上是如何工作的吗?
这是一个电子表格,展示了如何轻松完成集合操作:
Set Operations in Google Sheets
联合是={setA; setB}
差异(setA-setB)是=filter(setA, iserror(MATCH(setA, setB, false)))
交点是=filter(setA; MATCH(setA, setB, false))
解释
setA 和 setB 可以命名为范围,也可以使用普通范围表示法。命名范围只是让这一点更清楚。
并集只是将两个范围并置而成的新范围。
交集(下一个最简单的)取决于在它们退出的setB 中查找setA 的索引,并以此过滤 setA。
区别类似,但过滤 setA 以仅挑选在 setB 中找不到索引的成员。
额外积分
消除重复的并集就是setA + (setB-setA),所以由上面
={setA;filter(setB, iserror(MATCH(setB,setA,false)))}
【讨论】:
FILTER(setA, LEN(setA)) 替换所有setA 实例,这基本上在执行设置操作之前预先修剪所有isblank/空行。