【问题标题】:How to subtract two sets of values in Google Spreadsheets?如何减去谷歌电子表格中的两组值?
【发布时间】:2020-08-12 10:17:25
【问题描述】:

我在A:AB:B 中有两组值。如何在它们之间设置差异(最好使用公式),即从A:A 中获取那些在B:B 中不存在的值?

【问题讨论】:

    标签: google-sheets


    【解决方案1】:

    这样的公式可以做到这一点,而且速度非常快:

    =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 的回答中添加的注释,这可能会“忽略”或“隐藏”某些结果。
    • 我想知道和@ninjagecko 一样的事情......即COUNTIF(range, range) 发生了什么。这究竟是如何工作的???这是否适用于A:A 的每个单元格?当我把它放到一个单独的单元格中时,它只返回一个TRUE,所以我不确定它是如何为我们正在过滤的A:A 的每个部分运行的。有人可以帮忙解释一下这实际上是如何工作的吗?
    【解决方案2】:

    这是一个电子表格,展示了如何轻松完成集合操作:

    Set Operations in Google Sheets

    联合是={setA; setB}

    差异(setA-setB)是=filter(setA, iserror(MATCH(setA, setB, false)))

    交点是=filter(setA; MATCH(setA, setB, false))

    解释 setAsetB 可以命名为范围,也可以使用普通范围表示法。命名范围只是让这一点更清楚。

    并集只是将两个范围并置而成的新范围。

    交集(下一个最简单的)取决于在它们退出的setB 中查找setA 的索引,并以此过滤 setA。

    区别类似,但过滤 setA 以仅挑选在 setB 中找不到索引的成员。

    额外积分

    消除重复的并集就是setA + (setB-setA),所以由上面

    ={setA;filter(setB, iserror(MATCH(setB,setA,false)))}
    

    【讨论】:

    • 这可能看起来“忽略”或“隐藏”某些结果,因为保留了空白(也许它们被视为值或类似的东西),但实际上如果您期望值而不是看到它们,向下滚动很远。我处理这个问题的方法是用FILTER(setA, LEN(setA)) 替换所有setA 实例,这基本上在执行设置操作之前预先修剪所有isblank/空行。
    【解决方案3】:

    试试这个公式:

    =FILTER(A:A,REGEXMATCH(A:A&" ",JOIN("|",FILTER(B:B,B:B<>"")))=FALSE)
    

    【讨论】:

    • 有效,但对于较大的集合来说有点慢。
    • 我在两组中都有大约 300 行。
    猜你喜欢
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多