【问题标题】:Google Sheets - Filtering out values in a range from another rangeGoogle表格 - 从另一个范围中过滤掉一个范围内的值
【发布时间】:2020-06-26 12:01:47
【问题描述】:

-- EDIT #2 -- 再次更新了 Google 表格,使用了一个非常接近的解决方案。到目前为止,我拥有的最佳配方如下。 --

=ARRAYFORMULA(SPLIT(UNIQUE({ARRAYFORMULA(QUERY(IF(COUNTIF(G4:G&"|||"&H4:H,ARRAYFORMULA(A4:A&"|||"&B4:B))>0,REGEXREPLACE(A4:A&"|||"&B4:B,".*",""),A4:A&"|||"&B4:B),"SELECT * WHERE Col1 IS NOT NULL"));ARRAYFORMULA(QUERY(IF(COUNTIF(G4:G&"|||"&H4:H,ARRAYFORMULA(D4:D&"|||"&E4:E))>0,REGEXREPLACE(D4:D&"|||"&E4:E,".*",""),D4:D&"|||"&E4:E),"SELECT * WHERE Col1 IS NOT NULL"))}),"|||"))

-- 编辑 -- 更新了 Google 表格以更准确地反映我的用例 --

非常有信心以前有人问过这个问题,但我已经在谷歌上搜索了几个小时,而且我开始掉头发了。我想我必须使用 QUERY 函数,但不是 100%。

演示表在这里: https://docs.google.com/spreadsheets/d/1p_hqk9WydcyXQZT4bIm4DSZZnaPKbngtnZ0-laYHwk8/edit?usp=sharing

我想做的事: 我想合并 DATA 1DATA 2 下的范围,但我想排除以 DATA 3 中的值开头的行。

RESULT 1 没有增加价值,但显示了我是如何将 DATA 1DATA 2 加在一起的。

RESULT 2 显示了我想要得到的结果。

RESULT 3 隐藏但我到达了(并且不会再次增加价值,抱歉)。我可以让它大部分工作,但我必须在查询中手动指定我正在寻找哪些组合......坦率地说,我的数据集是巨大的。该公式目前如下所示:

=QUERY(UNIQUE({FILTER(A4:B,NOT(ISBLANK(A4:A)));FILTER(D4:E,NOT(ISBLANK(D4:D)))}),"SELECT * WHERE NOT Col1 STARTS WITH 'a' OR NOT Col2 STARTS WITH 'v'",-1)

希望有人可以帮助我!你是我唯一的希望。

【问题讨论】:

  • 用 Apps 脚本编写的自定义函数是否适合您?
  • 我总是热衷于尽可能坚持使用公式,但如果它使解决方案变得更容易,我非常乐意使用 Apps Script。一般来说,感觉很舒服。
  • 我有一个部分解决方案,但它并不完全在那里。不过,我的 COUNTIF 中的通配符效果不佳。有没有人对此有解决方案? =ARRAYFORMULA(SPLIT(UNIQUE({ARRAYFORMULA(QUERY(IF(COUNTIF(G4:G&"|||"&H4:H,ARRAYFORMULA(A4:A&"|||"&B4:B)))>0,REGEXREPLACE(A4: A&"|||"&B4:B,".*",""),A4:A&"|||"&B4:B),"SELECT * WHERE Col1 IS NOT NULL"));ARRAYFORMULA(QUERY(IF( COUNTIF(G4:G&"|||"&H4:H,ARRAYFORMULA(D4:D&"|||"&E4:E))>0,REGEXREPLACE(D4:D&"|||"&E4:E,".*" ,""),D4:D&"|||"&E4:E),"SELECT * WHERE Col1 IS NOT NULL"))}),"|||"))

标签: google-sheets google-sheets-formula google-sheets-query


【解决方案1】:

这适用于您的示例数据。它使用ARRAYFORMULAMATCH 连接两列,LEFT 仅使用匹配函数中的第一个字符。根据您的实际数据,您可能需要找到一种更智能的方法来执行 starts with 元素。

=UNIQUE({FILTER(A4:B,not(isblank(A4:A)),iserror(MATCH(ARRAYFORMULA(A4:A&left(B4:B,1)),ARRAYFORMULA(G4:G&H4:H),0)));FILTER(D4:E,not(isblank(D4:D)),iserror(MATCH(ARRAYFORMULA(D4:D&left(E4:E,1)),ARRAYFORMULA(G4:G&H4:H),0)))})

文档:

MATCH:here

ARRAYFORMULA:here

【讨论】:

  • 这似乎是向前迈出的一大步。有没有一种方法可以合并 REGEXMATCH 来执行“STARTS WITH”功能?
  • 这不是不可能的。我不知道数组公式是否会影响它
  • 我已经更新了我的问题@a-burge - 知道 COUNTIF 中的通配符如何更好地工作吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-24
  • 1970-01-01
  • 2021-01-16
  • 2017-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多