添加或VBA脚本以将过滤器命令添加到Excel

时间:2014-10-04 13:13:36

标签: excel excel-formula

Google表格包含一个语法为

的过滤器命令
=filter(Range, criteria 1, ... criteria n)

它返回一个数组。

我怎样才能在Excel中执行此操作?

示例:我有2列宽的范围,第1列中的Genus和第2列中的完整植物学名称。此范围名为bot_name

在其他地方,我有一个带有“Abies”的细胞C1,这是冷杉的属名。

在Google电子表格中,我可以这样做:

=UNIQUE(FILTER(Bot_Name,REGEXMATCH(Bot_Name,C1)))

对于范围中的每一行,如果REGEXMATCH返回true,则FILTER包括它。

Filter和Unique是过滤函数。

记录过滤器:
https://support.google.com/docs/answer/3093197

从这里我应该得到以下列表:

   Abies balsamea
   Abies concolor
   Abies lasiocarpa var bifolia
   Abies veitch

1 个答案:

答案 0 :(得分:0)

我建议您使用公式而不是Excel过滤器功能(这与您提到的FILTER功能非常不同),因为我认为您需要在更改搜索表达式时更改过滤后的数据(例如冷杉)。

首先,您需要检查哪些值符合您的条件:

我建议您使用COUNTIF函数 - 它允许您在搜索表达式中使用通配符 - 我在末尾添加*以查找以" Abies"开头的所有内容。

因此,辅助列中的公式如下所示:

=IF(COUNTIF(A2,$C$2 & "*")>0,A2,"")

您可以稍后隐藏辅助列。 然后你需要删除重复项 - 所以下一个最终公式将是一个非数组公式:

=INDEX($D$2:$D$15,MATCH(0,INDEX(COUNTIF($E$1:E1,$D$2:$D$15),0,0),0))

现在,您的工作表在单元格C2中的搜索表达式中显示如下:

enter image description here

也使用IFERROR去除有错误的单元格。您也可以使用命名范围而不是$D$2:$D$15来简化第二个公式。

Download the sample Excel sheet here.

这比使用数组的FILTER函数更复杂,我真的很想念Excel中的这个功能。