计算已过滤列中的多less个不同值(或获取不同值的列表)

有没有一种方法来计算Excel中过滤列中不同值的数量?

使用公式https://exceljet.net/formula/count-unique-values-in-a-range-with-countif我可以计算一个范围内的不同值的数量,但是当该范围已经过滤自动过滤我仍然得到未经过滤的计数。

例如:

AB 1 Scarf Blue 2 Hat Red 3 Gloves Green 4 Coat Blue 5 Balloon Red 6 Shoes Blue 

计算B =SUMPRODUCT((B1:B6<>"") / COUNTIF(B1:B6,B1:B6 & ""))唯一值应该返回3因为不同的值是RedGreenBlue

如果我自动筛选列B只selectRed项目,结果表将如下所示:

  AB 2 Hat Red 5 Balloon Red 

在这种情况下,返回的不同值的数量应该是1 。 但是上面的公式还是返回3

该公式还应该处理自动筛选器中的多个select,例如,对BlueGreen筛选应该导致下表:

  AB 1 Scarf Blue 3 Gloves Green 4 Coat Blue 6 Shoes Blue 

公式应该返回2 (蓝,绿)。

最后,如果我在列A而不是B上过滤,则公式应该仍然有效。 所以,如果我只对HatScarfCoat感兴趣,那么对这些值进行过滤,将导致:

  AB 1 Scarf Blue 2 Hat Red 4 Coat Blue 

公式应该返回2

(我正在使用Excel 2013,需要在公式中执行此操作,而不是使用VBA等)

我也在office.com上find了这个页面 ,我想这可能会有所帮助,但是唉,我无法让它为我工作。

此参考显示如何使用AGGREGATE排除隐藏的行

用AGGREGATE排除隐藏的行

然后你可以使用一个标准的方法来计算这样的唯一值

使用FREQUENCY计算唯一值

所以,如果你在B列计数值,你需要一个帮助列(比如说C)

 =IF(AGGREGATE(3,5,B2),B2,"") 

然后插入忽略空单元的唯一计数forms

 =SUM(IF(FREQUENCY(IF(LEN(C2:C10)>0,MATCH(C2:C10,C2:C10,0),""), IF(LEN(C2:C10)>0,MATCH(C2:C10,C2:C10,0),""))>0,1)) 

或者如果你喜欢你的配方

 =SUMPRODUCT((C2:C10<>"") / COUNTIF(C2:C10,C2:C10 & ""))