我有一个大型数据集,其中包含4列感兴趣的文本,即pokemon moves。从"move 1“到"Move 4”的每一列都包含不同的移动,并且每一行的组合都不同。例如:
" A | B | C | D | E".
" 1 Pokemon | Move 1 | Move 2 | Move 3 | Move 4".
" 2 Igglybuff | Tackle | Tailwhip | Sing | Attract".
" 3 Wooper | Growl | Tackle | Rain Dance| Dig".~ 1000多个
我的问题是:我希望从列表中过滤包含特定移动组合的行(精灵宝可梦)的数据集。例如:我想找出哪一个精灵同时拥有“咆哮”和“阻截”。这些移动可以出现在移动1到4中的任何一个(也就是移动的顺序并不重要),我该如何过滤这样的结果。我也有类似的情况,我想搜索3个或4个移动的组合,其具体顺序并不重要,或者也搜索拥有特定移动组合的特定pokemon。
我尝试过使用COUNTIF这样的函数,但是没有用到。非常感谢您的帮助/想法
发布于 2014-04-11 15:11:24
您可以考虑在excel中使用多种高级筛选选项:
选项1-高级过滤器
高级筛选器使您能够查询多个条件(这正是您需要的)。您还可以使用每个筛选器轻松地多次生成最终数据集。以下是Microsoft Excel 2010, which is virtually identical here to 2007的高级过滤器部分的链接。如果你不想仅仅使用基本公式,这将是一个很好的起点。
如果你真的走了这条路,那就按照网站上的步骤来做:
中指定这些行
- Set the criteria range to the place holding all your data on a single worksheet
- Run the filter and look at the resulting data. You can easily do a count on the number of records in that reduced data set.

选项2-透视表
你可能会在这里看到的另一个选项是使用透视表。Pivot tables and pivot charts只是我每天在工作中使用的现象级的工具,完全可以完成你想要的东西。
选项3-使用Visual Basic
作为第三种选择,您可以尝试使用visual basic代码来编写解决方案。这将为您提供完美的控制,因为您可以为每个条件精确指定要查看的范围。不幸的是,您需要了解VB代码才能使用此解决方案。有一些优秀的在线资源可以帮助你做到这一点。
发布于 2018-05-25 01:45:06
=COUNT(INDEX(MATCH(B2:E2, MoveList, 0), 0)) > 0如果范围B2:E2 (移动1到4)中的任何值在移动列表定义的范围内,将返回TRUE。您希望使用命名范围,以便可以轻松地将此公式复制到所有1000行中。
如果删除检查COUNT()值是否大于零的最后一部分,则会得到:
=COUNT(INDEX(MATCH(B2:E2, MoveList, 0), 0))它将返回与移动列表上的移动匹配的Pokemon的移动次数。
MATCH()有三个参数:查找值、查找范围和匹配类型。我不完全理解为什么,但是在INDEX()中包装公式的这一部分似乎可以让您使用一个数组作为第一个参数。也许这里有人能提供更好的解释。
在任何情况下,上面的公式似乎确实解决了问题。

最后,如果您只检查几个移动,而不是像上面那样使用一个令人困惑的公式和命名范围,您可以只为您想要检查的每个移动创建一列,例如“有咆哮吗?”和“有没有抢断?”然后只需使用=COUNTIF(B2:E2, "Tackle")和=COUNTIF(B2:E2, "Growl")即可。然后,您可以创建另一列来计算这些列的总和,并过滤掉零值,以便只显示有阻截或咆哮的Pokemon。
在研究如何做到这一点时,我查看了这两个页面:
https://stackoverflow.com/questions/23003716
复制相似问题