如何在Excel中引用过滤范围

时间:2018-06-17 04:31:51

标签: excel excel-formula lookup worksheet-function

我正在使用此函数来搜索当前表的Domain值是否在Domain.List表的Domain列中找到,返回TRUE / FALSE:

=NOT(ISERROR(VLOOKUP([@Domain],Domain.List[Domain],1,FALSE)))

当过滤此Domain.List时,将会有更少的条目。例如:

DOMAIN      INCLUDE
google.com    0
apple.com     1
amazon.com    0
alibaba.com   0

按include过滤时,将变为:

DOMAIN      INCLUDE
apple.com     1

现在回到原始表,我希望上面的函数仅对匹配apple.com的域返回TRUE。

但事实上,无论Domain.List表的过滤器状态如何,函数结果都不会改变。

有没有办法告诉Excel我只想针对Domain.List [Domain]列的可见部分运行公式?

1 个答案:

答案 0 :(得分:2)

将公式更改为:

=IF(SUMPRODUCT(SUBTOTAL(3,OFFSET(Domain.List[DOMAIN],ROW(Domain.List)-MIN(ROW(Domain.List[DOMAIN])),,1)),ISNUMBER(SEARCH([@Domain],Domain.List[DOMAIN]))+0),TRUE,FALSE)

在表格中:

DATA

这里有一个非常好的解释:Count visible rows only with criteria

部分引用:

您使用SUMPRODUCT同时应用SUBTOTAL功能(通过OFFSET)和标准 - 例如= apple.com(第二部分ISNUMBER(SEARCH([@Domain],Domain.List[DOMAIN]))+0是一种用SEARCH ISNUMBER缩写的布尔值。你将生成一个TRUE FALSE列表。)

SUBTOTAL可以排除隐藏的SUMPRODUCT行。由于SUBTOTAL返回一个数字,而SUMPRODUCT需要一个数组,我们使用OFFSET为每行提供一个引用SUBTOTAL,这样OFFSET每行将返回一个结果。

这是通过为OFFSET提供一个数组来实现的,该数组每行包含一个数字,从零开始,由下面生成:

ROW(Domain.List)-MIN(ROW(Domain.List[DOMAIN]))

你基本上是两个数组相乘,第一个说是行可见,第二个说它与域名匹配。然后将其包装在If公式中以生成所需的TRUE,FALSE。我依靠事实1 = TRUE来简化公式:

=IF(SUMPRODUCT(SUBTOTAL(3,OFFSET(Domain.List[DOMAIN],ROW(Domain.List)-MIN(ROW(Domain.List[DOMAIN])),,1)),ISNUMBER(SEARCH([@Domain],Domain.List[DOMAIN]))+0)=1,TRUE,FALSE)

IF(result = 1, TRUE,FALSE)只是IF(result , TRUE,FALSE),即IF(1 , TRUE,FALSE)