我有一张Google电子表格,其中包含2012年欧洲足球锦标赛的球队及其得分:
Team Points Goals scored
------ ------ ------------
Germany 6 3
Croatia 3 3
Ireland 0 1
... ... ...
现在我想过滤该列表,以便结果只包含所涉及团队的一部分。具体来说,我希望结果列表只包含德国,荷兰,葡萄牙,意大利,英国,法国,西班牙和克罗地亚的团队。
我知道我可以使用FILTER
函数从表中提取单个值。因此,我可能会写一个像FILTER
这样的=FILTER(A2:C; A2:A = 'Germany' OR A2:A = 'Netherlands' OR A2:A = 'Portugal' OR ...)
表达式,但我想避免这种情况,因为团队列表有点动态。
所以问题是:如何通过范围值过滤表格 - 而不仅仅是单个值?
答案 0 :(得分:33)
对于像我一样偶然发现这个帖子的求职者,请看Google product forum page,其中Yogi和ahab都提出了如何通过其他数据范围过滤一系列数据的问题的解决方案。
如果A3:C
包含要过滤的UEFA EURO 2012数据范围,并且D3:D
包含要过滤的团队列表,则E3
...
=FILTER(A3:C, MATCH(A3:A, D3:D,0))
或
=FILTER(A3:C, COUNTIF(D3:D, A3:A))
相反,如果您希望按D3:D
中列出的不小组进行过滤,则E3
...
=FILTER(A3:C, ISNA(MATCH(A3:A, D3:D,0)))
或
=FILTER(A3:C, NOT(COUNTIF(D3:D, A3:A)))
我已经example spreadsheet了解了这些功能'有效性。
答案 1 :(得分:1)
FILTER
范围不匹配的人=FILTER(A1:A, MATCH(A1:A, B1:B, 0))
=FILTER(A1:A, COUNTIF(B1:B, A1:A))
=FILTER(A1:A, ISNA(MATCH(A1:A, B1:B, 0)))
=FILTER(A1:A, NOT(COUNTIF(B1:B, A1:A)))
如果您需要使用FILTER
公式返回两个范围之间的求值,并且这两个范围的大小不同(例如从查询返回时),并且不能进行更改以匹配相同的范围大小,而您刚得到FILTER has mismatched range sizes. Expected row count: etc.
错误,那么这是一种解决方法:
为简单起见,假设您的过滤条件范围为 A1:A10 和 B1:B8 ,则可以使用数组括号{}
附加两个范围B1:B8
上的虚拟行通过使用A1:A10
来匹配大小REPT
,其中所需的重复次数应通过初始范围之间的简单计算来计算。
然后在此REPT
公式中,我们需要添加+1作为更正/故障保护(在两个初始范围之差为1的情况下),因为REPT
的最小有效值为2重复。因此从某种意义上讲,我们将需要创建一个B1:B11
的范围(从B1:B8
开始),稍后,我们将只修剪该范围的最后一行,以使B1:B10
与{ {1}}。我们将为A1:A10
下一步是将REPT
换成REPT
并除以第二个唯一符号。然后,(根据进一步的需求)需要将此SPLIT
包装到SPLIT
中(因为我们想将列大小与列大小匹配),最后一步是将其包装到{{1 }}和TRANSPOSE
通过QUERY
的简单数学运算再次输出,以精简最后一个句号。放在一起看起来像这样:
limit
答案 2 :(得分:0)
一些可能的不同方法:
=FILTER(C5:C;REGEXMATCH(C5:C;"one|two|five"))
result:任何包含一、二、五的文本。区分大小写。
=FILTER(C5:C;REGEXMATCH(C5:C;JOIN("|";DC5:DC7)))
与之前相同,但值在列表中:DC5:DC7
=FILTER(C5:C;REGEXMATCH(C5:C;"^("&JOIN("|";EE5:EE7)&")$"))
同上+匹配全文
建议的早期选项:
=FILTER(C5:C;MATCH(C5:C;EG5:EG7;))
=FILTER(C5:C;countif(EK5:EK7;C5:C))
不区分大小写的结果。
相同,不在列表中
=FILTER(C5:C;ISNA(MATCH(C5:C;EF5:EF7;)))
有趣:给出列表之间的差异。