在过滤表中计算唯一值,不会出现波动

时间:2017-09-21 08:53:20

标签: excel unique formula

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

公式必须在仅一个单元格(没有添加带标记的列),并且必须非易失性(例如,没有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)))

但是由于它的波动而过滤大表时速度非常慢。

要清楚,如果我过滤&#34;物品已购买&#34;在下表中,只包含值 a ,那么我的唯一客户数将是4(customerIDs 1,4,5,6):

enter image description here

提前致谢。

3 个答案:

答案 0 :(得分:1)

要计算相应header=None的唯一Customer,请使用以下公式

Item Purchased

=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 提交它。

要计算购买的所有商品的唯一身份客户数,请在a

中输入以下公式
Cell D2

根据需要拖放/复制。

然后在=IFERROR(INDEX($B$2:$B$16,MATCH(0,INDEX(COUNTIF($D$1:D1,$B$2:$B$16),0,0),0)),"") 中输入以下数组公式

Cell E2

=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))

根据需要拖放/复制。作为数组公式,按 Ctrl + Shift + Enter 进行提交。见图片以供参考。

enter image description here

答案 1 :(得分:0)

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

on_exception

如果您的数据位于=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:B中输入此公式。输入时应按CTRL + SHIFT + ENTER,因为这是数组公式。

enter image description here

我认为你可以在没有不稳定的偏移公式的情况下实现这一点,但这个公式可能会更快一点。

答案 2 :(得分:0)

您可以尝试使用

=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才能看到行。