Google Spreadsheets:按数组过滤范围

Vid*_*dal 17 filter google-sheets google-sheets-formula

我有一张Google电子表格,其中包含2012年欧洲足球锦标赛的球队及其得分:

Team     Points  Goals scored
------   ------  ------------
Germany    6          3
Croatia    3          3
Ireland    0          1
...       ...        ...
Run Code Online (Sandbox Code Playgroud)

现在我想过滤该列表,以便结果只包含所涉及团队的子集.具体来说,我希望结果列表只包含德国,荷兰,葡萄牙,意大利,英国,法国,西班牙克罗地亚的团队.

我知道我可以使用该FILTER函数从表中提取单个值.因此,我可能会写一个FILTER表达式,=FILTER(A2:C; A2:A = 'Germany' OR A2:A = 'Netherlands' OR A2:A = 'Portugal' OR ...)但我想避免这种情况,因为团队列表有点动态.

所以问题是:我如何通过一系列值过滤表- 而不仅仅是单个值?

Gre*_*reg 46

对于那些偶然发现这个帖子的求职者来说,请看这个谷歌产品论坛页面,其中Yogi和ahab都提出了如何通过其他数据范围过滤一系列数据的问题的解决方案.

如果A3:C包含要过滤的UEFA EURO 2012数据范围,并D3:D包含要过滤的团队列表,则E3...

=FILTER(A3:C, MATCH(A3:A, D3:D,0))
Run Code Online (Sandbox Code Playgroud)

要么

=FILTER(A3:C, COUNTIF(D3:D, A3:A))
Run Code Online (Sandbox Code Playgroud)

正滤波结果

相反,如果您想按列出的团队进行过滤D3:D,那么E3......

=FILTER(A3:C, ISNA(MATCH(A3:A, D3:D,0)))
Run Code Online (Sandbox Code Playgroud)

要么

=FILTER(A3:C, NOT(COUNTIF(D3:D, A3:A)))
Run Code Online (Sandbox Code Playgroud)

负过滤结果

这是我为展示这些功能的有效性而制作的示例电子表格.

  • 我想指出的是,您应该在答案中包含实际的细节,因为链接经常会被破坏,这使得这个答案在未来没有那么有用。 (2认同)
  • 谢谢你,道格拉斯。你是绝对正确的。我希望我更新的答案就足够了。 (2认同)

pla*_*er0 5

对于那些需要使用greg公式并与范围不匹配问题作斗争的人FILTER

\n
=FILTER(A1:A, MATCH(A1:A, B1:B, 0))\n\n=FILTER(A1:A, COUNTIF(B1:B, A1:A))\n\n=FILTER(A1:A, ISNA(MATCH(A1:A, B1:B, 0)))\n\n=FILTER(A1:A, NOT(COUNTIF(B1:B, A1:A)))\n
Run Code Online (Sandbox Code Playgroud)\n

如果您需要使用FILTER公式返回两个范围之间的计算,并且这两个范围具有不同的大小(就像从查询返回它们时一样)并且无法更改以匹配相同的大小,并且您会收到FILTER has mismatched range sizes. Expected row count: etc.错误,那么这是一个解决方法:

\n

为了简单起见,假设您的过滤器范围是A1:A10B1:B8,您可以使用数组括号{}在范围上附加两个虚拟行,B1:B8以匹配大小A1:A10,方法是使用REPT其中所需的重复次数应由初始范围之间的简单计算。

\n

那么对于这个REPT公式,我们需要添加 +1 作为校正/故障保护(在两个初始范围之间的差异为 1 的情况下),因为REPT至少需要 2 次重复。所以从某种意义上说,我们需要创建一个B1:B11(from B1:B8) 的范围,稍后我们将从范围中修剪掉最后一行,这样它就会B1:B10反对A1:A10。我们将使用 2 个独特的符号REPT

\n

下一步是包裹REPTSPLIT除以第二个唯一符号。然后,(根据进一步的需要)SPLIT需要将其包装到TRANSPOSE(因为我们希望将列大小与列大小相匹配),最后一步是通过简单的数学运算将其再次包装到输出中QUERY并从中取出,以修剪上次报告。把它放在一起看起来像这样:limitCOUNTA(A1:A10)

\n
=FILTER(A1:A10, NOT(COUNTIF(QUERY({B1:B8; \n TRANSPOSE(SPLIT(REPT("\xe2\x99\x82\xe2\x99\x80", COUNTA(A1:A10)-COUNTA(B1:B8)+1), "\xe2\x99\x80"))}, \n "limit "&COUNTA(A1:A10), 0), A1:A10)))\n
Run Code Online (Sandbox Code Playgroud)\n

\n