Google Spreadsheets:按数组过滤范围

时间:2012-06-14 08:53:27

标签: google-sheets

我有一张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 ...)表达式,但我想避免这种情况,因为团队列表有点动态。

所以问题是:如何通过范围值过滤表格 - 而不仅仅是单个值?

3 个答案:

答案 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))

Positive filter results

相反,如果您希望按D3:D中列出的小组进行过滤,则E3 ...

=FILTER(A3:C, ISNA(MATCH(A3:A, D3:D,0)))

=FILTER(A3:C, NOT(COUNTIF(D3:D, A3:A)))

Negative filter results

我已经example spreadsheet了解了这些功能'有效性。

答案 1 :(得分:1)

适用于需要使用greg's公式并难以解决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

使用2个唯一的符号

下一步是将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;)))

有趣:给出列表之间的差异。