在筛选出的表格中计算唯一值,而不会产生波动

我需要计算过滤表的列中的唯一值。

该公式必须只在一个单元格中 (没有添加具有标志的列),并且必须是非易失性的 (例如,没有OFFSET)

到目前为止,我有这个野兽:

=IF(COUNTA(A1:A3043) = SUBTOTAL(3, A1:A3043), SUMPRODUCT(1 * (A1:A3043 <> A2:A3044)),SUM(IF(FREQUENCY(IF(SUBTOTAL(3,OFFSET(A1,ROW(A1:A3043)-ROW(A1),0,1)),MATCH(A1:A3043,A1:A3043,0)),ROW(A1:A3043)-ROW(A1)+1)>0,1))) 

但是由于其波动性,过滤大型表格时速度很慢。

要清楚的是,如果我在下表中过滤“购买的物品”,为了只包含值a ,那么我的客户的唯一计数将是4(客户ID 1,4,5,6):

在这里输入图像说明

提前致谢。

要获得相应的Item Purchased的唯一Customer数,请使用以下公式

 =SUM(IF("a"=$B$2:$B$12, 1/(COUNTIFS($B$2:$B$12, "a", $A$2:$A$12, $A$2:$A$16)), 0)) 

要么

 =SUM(--(FREQUENCY(IF($B$2:$B$12="a",MATCH($A$2:$A$12,$A$2:$A$12,0)),ROW($A$2:$A$12)-ROW(A2)+1)>0)) 

其中, A2:B12是数据范围,用任何购买的商品代替。 这是一个数组公式,通过按Ctrl + Shift + Enter来提交。


要获得所有购买项目的唯一客户数,请在Cell D2input以下公式

 =IFERROR(INDEX($B$2:$B$16,MATCH(0,INDEX(COUNTIF($D$1:D1,$B$2:$B$16),0,0),0)),"") 

根据需要拖放/复制。

然后在Cell E2input下面的数组公式

 =SUM(--(FREQUENCY(IF($B$2:$B$16=D2,MATCH($A$2:$A$16,$A$2:$A$16,0)),ROW($A$2:$A$16)-ROW(A2)+1)>0)) 

要么

 =SUM(IF(D2=$B$2:$B$16, 1/(COUNTIFS($B$2:$B$16, D2, $A$2:$A$16, $A$2:$A$16)), 0)) 

根据需要拖放/复制。 作为一个数组公式,通过按Ctrl + Shift + Enter进行提交。 看图像以供参考。

在这里输入图像说明

要计算过滤列中的唯一值,请使用此公式

 =SUM(IF(FREQUENCY(IF(SUBTOTAL(3,OFFSET(A2,ROW(A2:A35)-ROW(A2),,1)),IF(A2:A35<>"",MATCH("~"&A2:A35,A2:A35&"",0))),ROW(A2:A35)-ROW(A2)+1),1)) 

如果您的数据在列A:BD1单元格中input此公式。 input时应该按下CTRL + SHIFT + ENTER,因为这是数组公式。

在这里输入图像说明

我不认为你可以实现这个没有易失的偏移公式,但这个公式可能会快一点。

你可以尝试使用

 =SUMPRODUCT((($A$2:$A$12<>"")*SUBTOTAL(3,OFFSET($A$2,ROW($A$2:$A$12)-MIN(ROW($A$2:$A$12)),0)))/COUNTIFS(A2:A12,A2:A12,B2:B12,B2:B12)) 

这将计算过滤列表中的所有唯一值。 你得到的问题是你需要OFFSET的行的可见性。