我正在使用此函数来搜索当前表的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]列的可见部分运行公式?
答案 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)
在表格中:
这里有一个非常好的解释: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)